12

Oracle 11g には varchar2 列を持つテーブルがあります。この列が文字列として定義される独自のプログラミング言語を使用します。この列には最大で 2000 文字 (4000 バイト) を格納できます。現在の要件は、列に 2000 文字を超える (実際には無制限の文字数) を格納する必要があるというものです。DBA は、メンテナンス上の理由から BLOB または LONG データ型を好みません。

私が考えることができる解決策は、元のテーブルからこの列を削除し、この列に別のテーブルを用意してから、各文字を行に格納して、無制限の文字を取得することです。このテーブルは、クエリ用に元のテーブルと結合されます。

この問題に対するより良い解決策はありますか?

更新: 独自のプログラミング言語では、string 型および blob 型の変数を定義できます。CLOB のオプションはありません。回答の内容は理解できますが、DBA を担当することはできません。BLOB や LONG からの逸脱が開発者にとって悪夢であることは理解していますが、それでも仕方がありません。

更新 2: 必要な最大文字数が 8000 文字の場合、さらに 3 つの列を追加して、それぞれ 2000 文字の 4 つの列を作成して 8000 文字を取得できますか。したがって、最初の列がいっぱいになると、値は次の列にスピルオーバーされます。この設計には悪い副作用がありますか? 提案してください。

4

6 に答える 6

12

BLOB が必要な場合は、DBA にそれが必要であると納得させてください。これらのデータ型には理由があり、独自の実装は組み込み型よりも悪くなります。

また、ニーズを十分に満たすCLOBタイプを確認することもできます。

于 2010-06-04T16:55:46.640 に答える
8

Oracle がストアド プロシージャを情報スキーマに格納した方法に従うことができます。テキスト列と呼ばれるテーブルを定義します。

CREATE TABLE MY_TEXT (
IDENTIFIER INT, 
LINE       INT,
TEXT       VARCHAR2 (4000),
PRIMARY KEY (INDENTIFIER, LINE));

識別子列は、元のテーブルへの外部キーです。Line は、テキスト フィールドを順番に保持するための単純な整数 (シーケンスではない) です。これにより、より大きなデータのチャンクを保持できます

はい、これは BLOB、CLOB、または LONG ほど効率的ではありません (可能であれば、LONG フィールドは避けます)。はい、これにはより多くのメンテナンスが必要です。ただし、DBA がデータベース内の CLOB フィールドの管理に固執している場合、これはオプション 2 です。

編集:

以下の My_Table は、現在展開しようとしている VARCHAR 列がある場所です。短いテキスト フィールドのテーブルに保持します。

CREATE TABLE MY_TABLE (
INDENTIFER INT,
OTHER_FIELD VARCHAR2(10),
REQUIRED_TEXT VARCHAR(4000),
PRIMERY KEY (IDENTFIER));

次に、MY_TEXT フィールドの LINE で並べ替えて、2 つのテーブルを結合するデータを取得するクエリを記述します。アプリケーションでは、文字列を 2000 文字のチャンクに分割し、行順に挿入する必要があります。

PL/SQLプロシージャでこれを行います。挿入と選択の両方。PL/SQL VARCHAR 文字列は最大 32K 文字です。これは、ニーズに十分な大きさである場合とそうでない場合があります。

しかし、この質問に答える他のすべての人のように、列を CLOB にするよう DBA に訴えることを強くお勧めします。プログラムの観点からは、これは BLOB であるため、管理が簡単です。

于 2010-06-05T01:06:25.333 に答える
2

BLOB も LONG もないと言いましたが、CLOB はどうでしょうか。4GBのキャラクターデータ。

于 2010-06-04T16:52:34.263 に答える
1

BFILEはDBAの実行可能な代替データ型ですか?

于 2010-06-04T18:24:42.930 に答える
1

理解できません。CLOB は適切なデータベースのデータ型です。あなたの奇妙なプログラミング言語が 8000 文字 (またはその他) の文字列を処理する場合、それらを CLOB に書き込むのを止めるものは何ですか。

より具体的には、CLOB として定義された列に 8000 文字の文字列を挿入しようとすると、(Oracle またはプログラミング言語から) どのようなエラーが発生しますか?

于 2010-06-05T00:50:46.443 に答える
1

BLOB が最適なソリューションです。それ以外のものは便利ではなく、メンテナンスの手間が大きくなります。

于 2010-06-04T16:52:23.373 に答える