ここでは、Oracleデータベースと新しいBIで作業します。ちょうど長さ12〜64以上の永続的に(長い文字列を保持するために)定義された可変文字を拡張することが可能かどうか疑問に思っています。 いくつかのプログラムとファイルがこのフィールドに依存しています。これはもっと一般的な質問です。可変文字として定義されたフィールドは、今後長さを拡張するためですか? THanks可変文字フィールド
答えて
これは可能な限り簡単であり、心配することはありません(少なくとも、Oracleで作業している限り、以下でもう少し詳しく説明します)。
create table tbl (x varchar2(10));
insert into tbl values ('mathguy')
alter table tbl modify (x varchar2(20));
問題は、他の言語(Javaなど)のアプリケーションで発生する可能性があります。 Oracle表からJavaアプリケーションにデータをロードする必要がある場合(例)、表の値に予約されているメモリーは、実際のサイズではなく、文字列の宣言された長さに基づいて割り当てられます。したがって、長さ10から長さ4000に変更すると、実際に必要かどうかにかかわらず、表から来る値に約40倍のメモリーが割り当てられます。これは問題でも問題ではないかもしれません。アプリケーションがどのくらいRAMが不足しているか(そして同じマシン上で何が起こっているのか)によって異なります。
varcharの目的は、将来、列サイズを拡張する準備とは関係ありません。ただし、フィールドの長さを増やすには、テーブルを変更するのがよいでしょう。
可変長の文字列を含むことができるフィールドには、varchar2データ型が使用されます。フィールドのサイズは、格納可能な最大文字数です。あなたの文字列がフィールドの長さを決して超えない限り、あなたは大丈夫でなければならず、まっすぐな文字を使うのに比べてスペースを節約するかもしれません。
長い文字列に対応するためにフィールド定義を拡張する必要がある場合は、ALTER TABLE ... MODIFY ...構文を使用できます。すでにテーブルに大量のデータがある場合、これはコストのかかる操作である可能性があることに注意してください。
ALTER TABLE
customer
MODIFY
(
cust_name varchar2(100)
);
Oracle Documentation of VARCHAR2 Hereを参照してください。
は、既存のフィールドの長さを延長するか、または必要な長さの新しいフィールドを追加する方がコストがかかりますか? – jac
既存のデータを保持する必要がある場合は、新しい列を追加した後、すべての行を適切な値に更新する必要があります。これは、インプレースの列を変更するよりもおそらく高価になります。一般に、混乱を避けるために、元の列を変更するだけでははっきりしない場合があります。 –
- 1. 可変文字列
- 2. Solrの変更文字列フィールドは
- 3. 文字列の可変長引数と文字列配列
- 4. ルビの可変文字を含む文字列のテスト
- 5. 未知の文字を可読な文字に変換する
- 6. .plistの代替文字列での可変文字列のコレクション?
- 7. CSVインポート(可変フィールド)
- 8. Azureテーブルストレージの文字列フィールドをdatetimeフィールドに変換します。
- 9. gsub文字列から可変文字を含む部分文字列
- 10. 可変アシスタンス内の特殊文字
- 11. 可変長の文字列の解析
- 12. 可変Pythonで文字を数える
- 13. Javaでの可変文字列
- 14. JavaScript可変文字列の置換
- 15. PHP文字列可変制限
- 16. mysqlクエリの可変長文字列へ
- 17. 可変文字範囲のJava RegEx
- 18. 可変値に基づくエコー文字
- 19. 可変長の部分文字列
- 20. C#可変長文字列配列
- 21. 入力フィールドに特殊文字を許可しない
- 22. 文字列の可変文字列の部分文字列を変数に置き換える
- 23. mysql utf8-binフィールドを小文字/小文字に変換します。
- 24. レール4.1.14.2 => 4.2.7.1値が文字列フィールドに文字列に変換され
- 25. 入力フィールドの可変長
- 26. 可変フィールドによる注文方法は?
- 27. フィールド名にSolrエスケープ文字
- 28. 文字列や数値フィールド
- 29. Pentahoレポートデザイナ大文字フィールド
- 30. OCamlで可変フィールドを変更する
ありがとうございます。フィールドを可変文字として宣言する理由は何ですか?この場合、それは12と定義され、必要に応じて今後拡張されるように変数として定義します。 – jac
はいこのフィールドを使用するJavaプログラムがあります – jac
"可変文字"は可変長を意味しますが、定義する方法や定義に応じて12の上限(つまり、バイトまたは文字)を意味する 'varchar2(12) 。ディスク上とメモリ上のOracle内部では、長さは文字列の実際の長さなので、すべてを 'varchar2(4000)'として定義することに害はありません。しかし、OracleからJavaアプリケーションへのデータを大量にロードしてメモリに問題がある場合は、そのことを認識していて、列の定義にあまり寛大ではない必要があります。 – mathguy