0

これは質問に関連しています: Oracle 11g に無制限の文字を保存する方法は?

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

4

3 に答える 3

11

CLOB代わりに列を使用しないのはなぜですか? 他のリンクを読みましたが、DBA がこれらのタイプの列を好まない理由がわかりません。つまり、CLOBまさにこの目的のためだけに Oracle の重要な機能です。そして、あなたの会社は Oracle を購入する際にその機能に多額のお金を払ったのですから、DB が実際に行うように設計されていないことを行うためのハックを考え出すのではなく、Oracle の機能を最大限に活用してみませんか?

CLOBDBA によって作成された制限を克服するためのハックの考案に時間を費やすのではなく、問題を解決するのに s が適切な機能である理由について DBA を教育することに時間を費やす必要があります。

DB が良い設計を行うために必要な機能を備えている場合、悪い設計に満足することはありません。DBA に問題がある場合は、彼らの視点を変える必要があるか、上級管理職に相談する必要があります。

于 2010-06-07T21:21:49.113 に答える
3

CLOBを使用する必要があるというdcpに同意します。しかしすべての意味に反して、 VARCHAR2 列だけを使用して無制限のテキストを「独自にロールする」ことを余儀なくされている場合、次のように VARCHAR2 列をテーブルにどんどん追加してそれを行うことはありません。

create table mytable
  ( id integer primary key
  , text varchar2(2000)
  , more_text varchar2(2000)
  , and_still_more_text varchar2(2000)
  );

代わりに、次のようにテキストを別の子テーブルに移動します。

create table mytable
  ( id integer primary key
  );
create table mytable_text
  ( id references mytable(id)
  , seqno integer
  , text varchar2(2000)
  , primary key (id, seqno)
  );

次に、mytable_text の多くの行を使用して、mytable の各行に好きなだけテキストを挿入できます。

于 2010-06-08T09:26:16.880 に答える
2

DCP と Tony の優れた回答に追加するには:

あなたが提案しているアプローチに悪い副作用があるかどうかを尋ねます。考慮すべき点がいくつかあります。

  1. 特定の文字列についてテキスト データの検索を実行するとします。あなたのアプローチでは、テキストを含む各列で検索を繰り返す必要があります。複雑で非効率的な WHERE 句になります。
  2. テキスト フィールドを拡張するたびに、別の列を追加する必要があります。これは、コーディングしたすべての場所を変更する必要があることを意味します (1)。
  3. あなたの名前を呪う後、この構造を維持しなければならないすべての人;-)
于 2010-06-08T16:39:56.210 に答える