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 です。

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

Oracle8iでBLOB型なら使用した事があるんですけど


参考までに見てやってください。

INSERT into Table名(a,b) VALUES (1,EMPTY_CLOB()");
の様にEMPTY_CLOB関数で最初にCLOBタイプのフィールドを初期化する必要があると思います。

その後CLOBフィールドのカラムを取得し
取得したフィールドに対して更新をかけるハズだったと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/03/10 18:07

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCLOBの容量確認

 CLOBに入力されたデータを分割して表示する必要がありまして、
「何バイト」入っているか知りたいのですが、どのようにしたらよいでしょうか?
全角文字、半角文字が混在するデータのため、どうしてよいかわからない状態になっています。
「何文字」入っているかは、DBMS_LOB.GETLENGTHで調べればよいのは
わかっているのですが・・。

Aベストアンサー

実際に環境がここにないので正しいかわからないですが、
文字数を出す際は、length。
文字バイト数を出す際は、lengthb。
を使用します。CLOBでもサポートされていると思います。
--------------------------------------------------
例)
SELECT LENGTHB('CANDIDE') "Length in bytes" FROM DUAL;
--------------------------------------------------

分割と言う意味ですと、
バイト単位ではsubstrb関数を使用するのが良いと思います。
--------------------------------------------------
例)
SELECT SUBSTRB('ABCDEFG',3,2) "Substring with bytes" FROM DUAL;
--------------------------------------------------

実際に環境がここにないので正しいかわからないですが、
文字数を出す際は、length。
文字バイト数を出す際は、lengthb。
を使用します。CLOBでもサポートされていると思います。
--------------------------------------------------
例)
SELECT LENGTHB('CANDIDE') "Length in bytes" FROM DUAL;
--------------------------------------------------

分割と言う意味ですと、
バイト単位ではsubstrb関数を使用するのが良いと思います。
--------------------------------------------------
例)
...続きを読む

QPostgreSQL : 多値従属性(第四正規化)のprimary key 設定

一つの項目の主キーを指定する際、
例えば
day date primary key
と指定しますよね。

2つの項目を1つとし、主キーを指定する記述の仕方がわかりません。

確かOracleでは,例えば
(n_code,s_code)primari key
でしたっけ??あまり自信がないですが、こんなような記述の仕方を
していたような覚えがあります。

よろしくお願い致します。

Aベストアンサー

たとえば...

CREATE TABLE hoge (
n_code INTEGER,
s_code INTEGER,
PRIMARY KEY( n_code, s_code )
);

という感じです。

QBLOBやCLOBのパフォーマンスを改善したい

Oracle 10g R2 を使用し、開発を行っていますが、
パフォーマンス改善という壁にぶつかっており、
お助けいただきたいと思いました。

要求定義の段階で、可変長のバイナリデータを扱う必要があり、
テーブル内には BLOB フィールドを用意しております。
レコード件数にすると、全体でおおよそ 500,000 ~ 1,000,000 件に
なります。(導入先によって上記範囲内で変動する)
データはさらに区分によって判別されるようになっております。

プログラムから投入する SQL 文については、
最適化を行っておりまして、最高のパフォーマンスが得られる
であろう構文になっておりますし、テーブルの設計についても、
検索条件となる項目へのインデックス設定を行っています。

現状としてプログラムの中でボトルネックとなっているのは、
BLOB データを Fetch するタイミングなんです。
開発環境は、C#.NET+ODP.NET なんですけど、ミドルウェアは、
oo4o を使った場合でも、Microsoft の Oracle のドライバを
使用したときでも同じ部分でボトルネックになっていました。
ちなみに、BLOB をやめて、CLOB にした場合も、
CLOB データを Fetch する部分がボトルネックになっていました。

テスト段階なのでバイナリデータが 4 KB 未満ですが、
これを VARCHAR2(4000) のフィールドに Base64文字列などで
格納した場合は、LOB データの Fetch はありませんので、
かなり高速な処理が実現できるのですが、実際の運用では、
4 KB を超えるようなバイナリデータが普通に現れてきます。
なので、VARCHAR2 でのデータベース設計ができない状態です。

そもそも、この BLOB フィールドや CLOB フィールドのデータを
Fetch する速度を向上させること、というのは可能なのでしょうか?
ちなみに、Oracle サーバ側の設定は一切行っておりません。

Oracle 10g R2 を使用し、開発を行っていますが、
パフォーマンス改善という壁にぶつかっており、
お助けいただきたいと思いました。

要求定義の段階で、可変長のバイナリデータを扱う必要があり、
テーブル内には BLOB フィールドを用意しております。
レコード件数にすると、全体でおおよそ 500,000 ~ 1,000,000 件に
なります。(導入先によって上記範囲内で変動する)
データはさらに区分によって判別されるようになっております。

プログラムから投入する SQL 文については、
最適化を行ってお...続きを読む

Aベストアンサー

1冊のマニュアルになるボリュームがあって色々書かれているので
開発者ガイドを見てください。
「アプリケーション開発者ガイド- ラージ・オブジェクト」です
個人的には設計段階でLOBは使用しないように最大限粘っていると思います。

参考URL:http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19247-01/toc.htm

QAccess 実行時エラー'3075' 対処方法

VBAの設定されているAccessファイルを作成したのですが、実行時エラー'3075' クエリ式 「'Mid([W_作業用]![※関税CD],2,2'のこの関数は式では使用できません」というエラーが発生しました。

ただ、このエラーについては、発生するPCと発生しないPCと二分しています。
エラーが発生するPCについては、発生しないようにするにはどうすればよいのでしょうか?
PCの環境を変更する必要があるのか、あるいは、システムそのものを改修する必要がある(Mid関数を修正する必要がある?)のでしょうか?周りに相談できる人がおらずに困っています。。

ps)ツール→参照設定で参照可能なライブラリファイルは確認した所、設定内容に問題はありませんでした。何が問題でこうしたエラーが発生しているのでしょうか・・

Aベストアンサー

その関数をどこで使ってますか?
クエリのフィールドでは無理ですよ?
更新クエリの値ならいいですけど。
画像あります?

QExcel VBA で Oracle CLOB型カラムの文字列を取得する方法

Excel VBA を使用して、Oracleに格納されている文字列を取得しようとしています。

Number型やVarchar2型のカラムからは問題なく取得できるようになったのですが、CLOB型で文字列を格納しているカラムからの取得でつまずいています。

自分の書いた方法だと、1600バイト以上の文字列が格納されているとエラー文字が返ってきてしまいます。

これ以上の文字数を取得する方法について教えてもらえないでしょうか?


'---// コード抜粋 ココから //---

'ORAセッション生成
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

'ORADB生成
Set OraDatabase = OraSession.OpenDatabase(<<dbname>>, <<id>> & "/" & <<passwd>>, 0)

Dim SQL As String '一覧取得用SQL
Dim RS As Object 'レコードセット

SQL = " SELECT <<<clob_col_name>> FROM <<table_name>> "

Set RS = OraDatabase.DbCreateDynaset(SQL, 0&)

Range("A1").Value = RS.fields("<<clob_col_name>>").GetChunk(0, 3263)

RS.Close

'---// コード抜粋 ココまで //---


環境は、Excel 2003、Oracle 9iです。
ひとつよろしくお願いいたします。

Excel VBA を使用して、Oracleに格納されている文字列を取得しようとしています。

Number型やVarchar2型のカラムからは問題なく取得できるようになったのですが、CLOB型で文字列を格納しているカラムからの取得でつまずいています。

自分の書いた方法だと、1600バイト以上の文字列が格納されているとエラー文字が返ってきてしまいます。

これ以上の文字数を取得する方法について教えてもらえないでしょうか?


'---// コード抜粋 ココから //---

'ORAセッション生成
Set OraSession = CreateObje...続きを読む

Aベストアンサー

>1600バイト以上の文字列が格納されていると

本当に1600バイトジャストで起こりますか?

GetChunk(0, 3263)
で、チャンクサイズを3263バイト取ってあるのがまずいような気がします。

http://www.shift-the-oracle.com/element/data-type/data-type-inside.html
を見ると分かるように、CLOB型の内部データ型は2バイト固定文字列ですので
この指定方法だと3263が奇数なので、2バイト文字を途中で割ってしまいまい、取り出せないのではないでしょうか。
従って3262バイト(=1631文字)までは大丈夫で、それ以上の文字列が格納されている場合は最後にゴミがついてくるため怒られると思います。

GetChunkメソッド
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/win.102/B25023-01/sermthod.htm#CIHGIFFD

※第2引数は文字数ではなくバイト数です

>1600バイト以上の文字列が格納されていると

本当に1600バイトジャストで起こりますか?

GetChunk(0, 3263)
で、チャンクサイズを3263バイト取ってあるのがまずいような気がします。

http://www.shift-the-oracle.com/element/data-type/data-type-inside.html
を見ると分かるように、CLOB型の内部データ型は2バイト固定文字列ですので
この指定方法だと3263が奇数なので、2バイト文字を途中で割ってしまいまい、取り出せないのではないでしょうか。
従って3262バイト(=1631文字)までは大丈夫で、そ...続きを読む

Q<ファイル3>を開いた時に、<ファイル2><ファイル1>から自動的に書き込ませたい

ファイルメーカーPro6 for Winを、1カ月前に
始めた初心者です。
OS:WindowsXP

例えば、
<ファイル1>
会社No 会社名  住所   電 話 
-----------------------------
 1    AAA   ●●●  ○○○ 
 2    BBB  ▲▲▲  △△△ 

<ファイル2>
車輌No 会社名 会社No  車種
-------------------------------
01-11  AAA    1    普通車
11-23  AAA    1     軽自動車
78-56  BBB    2     普通自車

<ファイル3>
車輌No 会社No 会社名   住所    電 話   車種
-----------------------------------------------
01-11   1     AAA    ●●●   ○○○   普通車
11-23   1     AAA    ●●●   ○○○   軽自動車
78-56   2     BBB    ▲▲▲   △△△    普通車

リレーションで<ファイル3>と<ファイル1>をキー「会社No」で結び、
<ファイル3>と<ファイル2>をキー「会社No」で結ぶ。
<ファイル3>を開いた時に、<ファイル2>の車輌Noを基に、
車輌No順に上記の<ファイル3>のように
自動的に<ファイル2>と<ファイル1>から<ファイル3>に
書き込ます(コピー)ようにするには
どうすれば、よろしいでしょうか。
教えて下さい。

ファイルメーカーPro6 for Winを、1カ月前に
始めた初心者です。
OS:WindowsXP

例えば、
<ファイル1>
会社No 会社名  住所   電 話 
-----------------------------
 1    AAA   ●●●  ○○○ 
 2    BBB  ▲▲▲  △△△ 

<ファイル2>
車輌No 会社名 会社No  車種
-------------------------------
01-11  AAA    1    普通車
11-23  AAA    1     軽自動車
78-56  BBB    2     普通自車

<ファイル3>
...続きを読む

Aベストアンサー

レイアウトモードでメニューから「新規レイアウト」を選べば新しいレイアウトを作成できます。

現在のレイアウトに少し手を加えるのであれば
ファイル3のフィールドと同じフィールドをファイル2に
フィールド定義してからレイアウト→レイアウトの複製
で作ると簡単です。
このあたりはマニュアルにも載っていますので熟読を
おすすめします。
ファイルメーカーのマニュアルとヘルプはかなりよく
出来ていますよ。

QCLOBデータの取得方法

実行環境は、WindowsXP,VB6(SP6),Oracle10gで、oradc.ocxを使ってoo4接続しています。
SELECT実行時は、ORA_DYNASET.Fieldsを参照して.VALUEから検索結果値を取得しています。
今まで、LONG型フィールドは何もせずに値の取得が可能でしたが、
CLOB型に変更したことにより、ここでエラーが発生するようになりました。
CLOBのフィールドにto_char関数をかけると、.VALUE参照時のエラーは無くなりましたが、データが4000バイトで切れてしまいます。
現在当方での唯一の回避策は、CLOB型フィールド名を"A"とすると、
to_char(substr(A,1,4000)),
to_char(substr(A,4001,4000)),
to_char(substr(A,8001,4000)) ・・・・・
といった形でのSELECT文をきる事になります。

そもそもは、.VALUEプロパティ参照時のエラーを無くしたいのですが、無くす方法、又は、それにみあう代替策をご存知の方は教えてください。

※なお、LONG型の場合も、10gになってからはデータが4000バイトで切れるとの報告も受けております。最初はTO_CHAR関数のせいだと思っていましたが、VB側のオブジェクトの壁なのでしょうか・・・

実行環境は、WindowsXP,VB6(SP6),Oracle10gで、oradc.ocxを使ってoo4接続しています。
SELECT実行時は、ORA_DYNASET.Fieldsを参照して.VALUEから検索結果値を取得しています。
今まで、LONG型フィールドは何もせずに値の取得が可能でしたが、
CLOB型に変更したことにより、ここでエラーが発生するようになりました。
CLOBのフィールドにto_char関数をかけると、.VALUE参照時のエラーは無くなりましたが、データが4000バイトで切れてしまいます。
現在当方での唯一の回避策は、CLOB型フィールド名を"A"とする...続きを読む

Aベストアンサー

OraField オブジェクトの .GetChunk() を使用するか、OraCLOB オブジェクトを使用してみてはどうでしょうか?

QINSERT INTO table(DATE) VALUES('20090101')ができません。

初めましてご教授よろしくお願いします。

Accessにレコードを追加しようとしているのですがうまくいきません。

どうもDATEというフィールドにテキスト型の'20090101'を入れようとするのがいけないみたいです。

予約語だからDATEのフィールド名を変えた方がいいことはわかっているのですが、お客様がテーブルを作成しているので変更することができません。

お客様いわくテキスト型で入るというのですがどうすれば入るのでしょうか?

ちなみにDATEフィールドはテキスト型です。

エラー内容は「INSERT INTO ステートメントの構文エラーです。」と表示されます。

Aベストアンサー

INSERT INTO table(DATE) VALUES('20090101')

INSERT INTO table([DATE]) VALUES('20090101')
にしてみてください。

QSn = 1 + 2x + 3・x^2 + 4・x

Sn = 1 + 2x + 3・x^2 + 4・x^3 + ・・・ + n・x^(n-1)
x・Sn = x + 2・x^2 + 3・x^3 + 4・x^4 + ・・・ + n・x^n
(1-x)Sn = 1 + x + x^2 + x^3 + x^4 + ・・・ + x^(n-1) - n・x^n
x(1-x)Sn = x + x^2 + x^3 + x^4 + ・・・ + x^(n-1) + x^n - n・x^(n+1)
(1-x)^2・Sn = 1 - (n - 1)・x^n + n・x^(n+1)


このあと、
場合わけらしいのですか、わからないのでおしえてください
ちなみに、これは
1番最初の式の和を求める数列の問題です!

早めにお願いします

Aベストアンサー

>x(1-x)Sn = x + x^2 + x^3 + x^4 + ・・・ + x^(n-1) + x^n - n・x^(n+1)
>(1-x)^2・Sn = 1 - (n - 1)・x^n + n・x^(n+1)
ここの計算が間違っています。
正しくは
(1-x)^2・Sn = 1 - (n + 1)・x^n + n・x^(n+1) …(★)

場合分けは
両辺を(1-x)^2で割るので x=1のとき (1-x)^2=0では割れないので
x=1とx≠1の場合分けをします。

x≠1の場合 (1-x)^2≠0なので
(★)の両辺を(1-x)^2で割って
 Sn={1-(n+1)・x^n + n・x^(n+1)}/(1-x)^n
x=1の場合
 Sn=1+2+ … +n ={(1+2+ … +n-1 +n)+(n +n-1+ … +2+1)}/2
={(1+n)+(1+n)+ … +(1+n)+(1+n)}/n
={(n+1)*n}/2
=n(n+1)/2

QデータベースのSQL文について質問です><

スクール名=(1) 地区名=(2) 受講生数=(3) 講師数=(4)

| (1) | (2) | (3) | (4) |

| 第一 | A | 100 | 03 |
| 第二 | C |2,000| 10 |
| 第三 | C |1,000| 10 |
| 第四 | B | 200 | 03 |
| 第五 | B |1,000| 03 | //スクール地域別表


この表からそれぞれの地区の講師1人あたりの受講生数を抽出するSQL文を作りたいのですが・・

自分で考えてみたところ

SELECT 地区名 SUM(受講生数)/SUM(講師数)
FROM スクール地域別表
GROUP BY 地区名

って感じかと思ったですが自信がありません><教えてください。

Aベストアンサー

講師数の部分が「03」とあるので文字列な気がしますが、
数値であれば合っていると思います。
試せないのでしょうか?


人気Q&Aランキング