Oracle9iでXMLType(CLOB)のファイルを格納方法について

このQ&Aのポイント
  • Oracle9iでXMLTypeのファイルを格納する方法について教えてください。
  • XMLTypeのファイルを格納する際に「SP2-0027: Input is too long (> 2499 characters) - line ignored」というエラーメッセージが表示され、うまく格納できません。
  • 11MBのXMLファイルを格納したい場合、うまく格納する方法はありますか?
回答を見る
  • ベストアンサー

Oracle9i で XMLType (CLOB) のファイルを格納したいのですが

Oracle9i で XMLType のファイルを格納しようと思ったのですが、 SP2-0027: Input is too long (> 2499 characters) - line ignored … と表示され、うまく格納できません。 格納方法をご教授お願いできませんでしょうか? 具体的にはスキーマの作成は CREATE TABLE xml_tab ( id NUMBER PRIMARY KEY, body sys.XMLType ); により行い、データの格納は INSERT INTO xml_tab VALUES(1, sys.XMLType.createXML( '<?xml version="1.0" standalone="yes"?> <site> …(中略)… </site>')); により行いました。 XML ファイルが小さいとちゃんと格納できるのですが、 格納したいファイルは 11MB あるので、それが原因かと 思います。 OS は Miracle Linux 2.0 です。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hysteric5
  • ベストアンサー率28% (4/14)
回答No.1

Oracle8iでBLOB型なら使用した事があるんですけど 参考までに見てやってください。 INSERT into Table名(a,b) VALUES (1,EMPTY_CLOB()"); の様にEMPTY_CLOB関数で最初にCLOBタイプのフィールドを初期化する必要があると思います。 その後CLOBフィールドのカラムを取得し 取得したフィールドに対して更新をかけるハズだったと思います。

unicorn01
質問者

お礼

ありがとうございました。 結局 Oracle9i の XML サポートが貧弱だったため、この機能を利用するのは 断念しました。 ただ教えていただいた方法を使ってみましたが結局ダメでした。 「EMPTY_CLOB()」に相当する「EMPTY_XMLType()」がなかったことが原因でした。 (もちろん「EMPTY_CLOB()」も試してみました。)

関連するQ&A

  • SQLへファイルを格納

    PHP+MySQL(接続にはDB.phpを利用)を利用してフォームからファイルを アップしてそれをDBに格納するプログラムを組んでいるのですが データベースの構造は CREATE TABLE `test` ( `id` int(11) NOT NULL auto_increment, `filedata` longblob, `kaku` text collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ; 下記がそのプログラムの処理部分です。 $data = file_get_contents($_FILES['upfile']['tmp_name']); $sql ="INSERT INTO test(filedata,kaku) VALUES('$data','$kaku')"; $DbObj->DBSQL($sql); ・$DbObj DB.phpを利用してのデータベース接続オブジェクト(クラス)で クラスの中身は商用のWebアプリの開発用のため掲示できませんが この処理以外は正常に動いています。 $sql ="INSERT INTO test(filedata,kaku) VALUES('11','$kaku')"; では正常動作確認しています。 ・$kaku ファイルの拡張子を格納している(拡張子はファイルを取りだ時に利用) 主キーはauto_incrementを利用しているのでINSERT文で設定の必要なし。 って状況で実行をすると DB Error: syntax error とエラーをはき処理できません。 どのようにしたらデータベースに格納できのでしょうか?

    • ベストアンサー
    • PHP
  • XMLDocumentでスキーマを無視して取得

    XMLDocument.LoadXmlを使用して、XML文字列を読み込もうとしています。 ■以下のことを行おうとしています。 1.DBに格納されたデータ(Byte配列)をStringの文字列に変換。  ※文字列にする理由…ディスク領域にファイル出力などは行わずに行いたい為。 2.XML文字列の要素(タグ)を<HOGE>~</HOGE>の構造を階層を維持したまま  DataSetや、HashTableに格納したい。 例) <?xml version="1.0" standalone="yes"?> <xs:schema id="testDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <HOGE> <TEST1> <SUBTEST1>あいうえお</SUBTEST1> </TEST1> <TEST2> <SUBTEST2>かきくけこ</SUBTEST2> </TEST2> </HOGE> ※2行目の<xs:schema~のスキーマ部分は無視して、HOGEブロック内だけの要素を取り出したい。 ※また格納したDatasetなどから、SUBTEST1などの要素名を指定して  「あいうえお」の値を取得したい。 ■対応  上記を実現するために、XMLDocument.LoadXMLを使用しました。    XMLDocument.LoadXML(★上記の例の文字列をString変数に格納しで指定★)    ですが、上記のようにすると  「ルート要素が見つかりません」旨のエラーが出て煮詰まっております。    DataSetのReadXML等だと、XmlReadModeなるものが使用でき、  ReadXMLに引数としてXmlReadMode.InferSchemaを指定すると、  インラインスキーマを無視した要素取得ができるようですが、  今回はXML文字列からの値取得が大前提の為、XMLDocumentを使用している次第です。    XMLDocumentでも、DataSet.ReadXMLのようにスキーマ部分を無視して、  XML文字列を何らかの配列に格納し、要素検索ができる形を行いたいです。  XML文字列をString変数に格納後に、スキーマ部分だけ除外して読み込む方法も考えたのですが  XMLの構造体が常に例と同じ構造で来る訳ではないので、文字列操作ではなく  XMLDocument「スキーマを読まないで要素を取得する方法」があればと思い投稿しました。 自身でもあと1日調査する猶予があるのですが、残された時間が時間の為 何か少しでも良い方法や案をご存知の方おられましたら、 ご教授願いますでしょうか。 よろしくお願いいたします。  

    • ベストアンサー
    • XML
  • ORACLE ログオントリガーで接続制限

    初心者です。失礼のないように努力いたしますのでご協力お願いいたします。 ログオントリガーを使用して接続者の制限をしたいのですが正常に動作しません。 CREATE OR REPLACE TRIGGER LOGON_TRG AFTER LOGON ON DATABASE DECLARE STR_SCHEMANAME VARCHAR2(20); STR_OSUSER VARCHAR2(20); STR_PROGRAM VARCHAR2(20); BEGIN SELECT USERNAME,OSUSER,PROGRAM INTO STR_SCHEMANAME,STR_OSUSER,STR_PROGRAM FROM V$SESSION WHERE audsid = USERENV('SESSIONID'); IF STR_SCHEMANAME = 'SCH1' AND STR_OSUSER = 'USER1' THEN INSERT INTO ALOG (SCHEMANAME,OSUSER,LOGIN_DAT,PROGRAM)VALUES(STR_SCHEMANAME,STR_OSUSER,TO_DATE(TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS'),'YYYY/MM/DD HH24:MI:SS'),STR_PROGRAM); COMMIT; RAISE_APPLICATION_ERROR(-20000, 'Can not login'); END IF; END LOGON_TRG; <説明> スキーマ='SCH1'にOSユーザー=’USER1’が接続してきたらALOGに情報を記録して接続しない。 このトリガーはSYSで登録しています。 <結果> スキーマ='SCH1'にOSユーザー=’USER1’で接続するとALOGに記録はするのですが、 エラーメッセージが表示されず正常に接続できてしまいます。 <質問> ○RAISE_APPLICATION_ERRORがなぜ正常に動作しないのかがわかりません。 ○RAISE_APPLICATION_ERRORに権限的なものが必要なのでしょうか? (いろいろと調べてみましたが特に権限での制限は見当たりませんでした) 何か要因に思い当たる方がいらっしゃいましたらご協力いただければと思います。 よろしくお願いいたします。

  • Google maps api, xmlデータ

    mysqlに格納したデータをphpにてxmlデータを生成しました。 xmlデータは、◯◯.phpファイルです。 このデータをHTML5とjavascriptを使ってgoogleマップに表示させるところでつまづいています。 いろいろと参考になりそうなサイトを見てコーディングしているのですが、うまくいきません。 シンプルにマップにデータを表示させるということに関してアドバイスや参考になるサイト等を教えて戴けないでしょうか。 宜しくお願いします。

  • 別ファイル(.sql)に記述したクエリの連続実行

    毎度お世話になっております。 現在、SQLServer2005EXPRESS,VisualSudio2008(C#)にて、 十数個の新しいストアドプロシージャと、 それを必要とするアプリを作成しております。 これらを配布先で実装するにはどうするのが最も(使用者にとって)容易か? 知恵をお貸しください。 アプリは実行ファイルをそのまま配布(インストーラー等)すれば 問題無いと考えていますが、ストアドプロシージャは配布先の サーバー管理者がDBに追加しなくてはいけません。 現在、ストアドを作成するためのSQL文を記述した "CREATE_01.sql"~"CREATE_10.sql"を用意していまして、 DB管理者はManagement StudioでDBにログインした状態で これら.sqlファイルを順番にダブルクリック&実行していけば ストアドの作成はできます。 ですが全部で10回も同じ操作をせねばいけません。 できれば「これ押すだけで後は待つだけ」くらいに容易な物にしたいのです。 "CREATE_01.sql"~"CREATE_10.sql"の中身は全てストアドのCREATE文 で、試しに1っの.sql内に実行したい順に CREATE PROCEDURE XXX_01 … AS (中略) CREATE PROCEDURE XXX_02 … AS (中略) CREATE PROCEDURE XXX_03 … AS (中略) …と、いった記述をしますと、使用変数等のエラーが多発し、 また10のSQL中でエラーが出ないように変数を振りなおす&確認する 時間を考えると効率的な方法ではなく思えます。 コマンドの連続実行、というと.batファイルが真っ先に思い浮かぶの ですが、.bat 入門 SQLServer 等のキーワードで検索をしましたが batの用法が幅広いからでしょうか? 現状の私に活用・理解出来るサイト等を見つける事が出来ませんでした。 初歩的な質問をしているかもしれませんが、どうぞよろしくお願いします。

  • PHPデータをMYSQLに格納

    こちらのmysqlのフィールドが 1. CREATE TABLE `temp_upload` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(255) NOT NULL default '',`mime` varchar(255) NOT NULL default '',`image` longblob NOT NULL, `created` timestamp(14) NOT NULL, PRIMARY KEY (`id`)) の場合では下記のコードを入力してBLOBに画像の格納が出来ました。 # // 追加SQL作成 # $sql = sprintf( 'INSERT INTO temp_upload ( name, mime, image ) VALUES ( "%s", "%s", "%s" )', # mysql_real_escape_string( $_FILES['image']['name'] ), # mysql_real_escape_string( $_FILES['image']['type'] ), # mysql_real_escape_string( $image ) ); # # # $result = mysql_query( $sql ); # # header( sprintf( 'Location: %s', $_SERVER['SCRIPT_NAME'] ) ); # exit; # # } ただしもmysqlのフィールド数がもっとある場合はどのように記述をすればいいのでしょうか。 色々と調べ、なんども変更を加えて試してもみたのですがどうしてもmysqlにデータ・画像が格納されません。 こちらがその全然動かないコードになります。 $sql = sprintf( 'INSERT INTO temp_upload (sname, str_check1, sonohoka, train, ken, add1, stime, holiday, denwa, menu1, menu2,url, picname, mime, image ) VALUES ("$sname","$str_check1", "$sonohoka", "$train", "$ken", "$add1", "$stime", "$holiday", "$denwa", "$menu1", "$menu2","$url", "%s", "%s", "%s" )',     mysql_real_escape_string( $_FILES['image']['picname'] ), mysql_real_escape_string( $_FILES['image']['type'] ), mysql_real_escape_string( $image ) ); $result = mysql_query( $sql ); header( sprintf( 'Location: %s', $_SERVER['SCRIPT_NAME'] ) ); exit; } 大変申し訳ないのですが、どなたかお分かりになるかたご教授お願い出来ませんでしょうか?

    • 締切済み
    • PHP
  • テーブル自体のバックアップ

    教えてください。 今オラクルのDBにTEST1テーブルが存在するとします。 ------TEST1--------------------- id varchar(5) Primary Key name varchar(20) old int -------------------------------- 今このテーブルとまったく同じデータを持ち、同じ構成のテーブルTEST2を 作成したいと考えています。 (1)create table TEST2( id varchar(5) primary key, name varchar(20), old int ); (2)insert into TEST2( id, name, old) values (select id, name, old from TEST1); としてTEST2テーブルを作成して、TEST1のデータを格納していますが、 他の方法はないでしょうか? たとえばこんなコマンドはありませんが、 COPY TEST1 TEST2 とか、 オラクルマネージャみたいなもので、 コピペして、名前をTEST2にする とかなんでもいいです。 TEST1のバックアップをとりたいのですが・・・・ すみません、わかりづらい説明で。 宜しくお願い致しますm(_ _)m

  • ファイルサーバの日本語フォルダ名へのリンク

    勉強しはじめで質問内容にも至らない点があるかと思いますが何卒アドバイスをお願いいたします。 イントラを作成するにあたり、ファイルサーバー上の日本語名フォルダにリンクしたいのですが、文字化けをしてしまいます。ソースは下記のような感じです。 ■xmlファイル「test.xml」 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <root> <item> <title>日本語フォルダ名</title> <link>\\test01¥テストデータ</link> </item> <item> <title>管理</title> <link>\\test01\経費管理</link> </item> </root> ■xslファイル「test.xsl」 <?xml version="1.0" encoding="utf-8"?><!-- DWXMLSource="test.xml" --> <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " ">  中略 <!ENTITY euro "?"> ]> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="utf-8"/> <xsl:template match="/"> <xsl:for-each select="root/item"> <a href="{link}"><xsl:value-of select="title"/></a><br /><br /> </xsl:for-each> </xsl:template> </xsl:stylesheet> これをオーサリングソフト(Dreamweaver8を使用)でプレビューすると、日本語フォルダ名が文字化けをしてしまいリンクができません。 ファイル名を半角英数にすれば済む話ではあるのですがあまりに大量のファイルがあるのと、管理上の問題でフォルダ名はなんとか日本語のままで使用したく考えております。 お手数ですが回避策、代替案などございましたら教えていただけると助かりますので何卒よろしくお願い申し上げます。

    • ベストアンサー
    • XML
  • MySQLでのcsvファイル読み込み

    必要に駆られたのでMySQLについて勉強しているのですが、 ファイル読み込みで問題が起こり、詰まってしまっています。 MySQL上で自作したsampledb内にテーブルprefectureを作成し、 そのテーブル内にPrefecture.csvファイル(文字コードshiftJIS)からデータを入力しようと しているのですが、最初の一件しかテーブルに格納されず、他のデータが入らないのです。 以下に入力したクエリ文を掲載します。 create database sampledb default character set sjis create table Prefecture(PREF_CD INT(3),PREF_NAME VARCHAR(10),PRIMARY KEY(PREF_CD)) LOAD DATA INFILE "Prefecture.csv" -> INTO TABLE Prefecture FIELDS TERMINATED BY"," -> LINES TERMINATED BY"\r\n"; Query OK, 1 row affected, 1 warning (0.08 sec) Records: 1 Deleted: 0 Skipped: 0 Warnings: 1 select * from prefecture +---------+-----------+ | PREF_CD | PREF_NAME | +---------+-----------+ |       1 | 北海道 2 | +---------+-----------+ 1 row in set (0.00 sec) Prefecture.csvについてはこちらのサイト仕様上添付できませんでしたが、 1,北海道 2,青森県 3,岩手県 . . .(以下省略) のように、47都道府県の番号と地名を並べたものです。 独力では解決法を見出せません。 どうかご助力お願いします。

    • ベストアンサー
    • MySQL
  • XML管理による写真を更新しても反映されない

    あけましておめでとう御座います。 現在Actionscript3.0にてサイト製作中です。 サイトのトップページの写真をXMLで管理しており、 XMLでは指定の画像格納フォルダにある画像を指定しております。 その画像を同じファイル名で別の画像に上書きし、 サーバにアップしても上書きした画像に反映されず、 ブラウザを何度更新しても画像が更新されませんでした。 画像のファイル名を変更し、XMLで指定しているファイル名も 変更して再度アップしてみましたが、やはり画像が更新されません。 これはブラウザのキャッシュの問題でしょうか? 何方かご教授お願いいたします。

    • ベストアンサー
    • Flash