2017-07-26 13 views
0

ここでは、Oracleデータベースと新しいBIで作業します。ちょうど長さ12〜64以上の永続的に(長い文字列を保持するために)定義された可変文字を拡張することが可能かどうか疑問に思っています。 いくつかのプログラムとファイルがこのフィールドに依存しています。これはもっと一般的な質問です。可変文字として定義されたフィールドは、今後長さを拡張するためですか? THanks可変文字フィールド

答えて

0

これは可能な限り簡単であり、心配することはありません(少なくとも、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が不足しているか(そして同じマシン上で何が起こっているのか)によって異なります。

+0

ありがとうございます。フィールドを可変文字として宣言する理由は何ですか?この場合、それは12と定義され、必要に応じて今後拡張されるように変数として定義します。 – jac

+0

はいこのフィールドを使用するJavaプログラムがあります – jac

+0

"可変文字"は可変長を意味しますが、定義する方法や定義に応じて12の上限(つまり、バイトまたは文字)を意味する 'varchar2(12) 。ディスク上とメモリ上のOracle内部では、長さは文字列の実際の長さなので、すべてを 'varchar2(4000)'として定義することに害はありません。しかし、OracleからJavaアプリケーションへのデータを大量にロードしてメモリに問題がある場合は、そのことを認識していて、列の定義にあまり寛大ではない必要があります。 – mathguy

0

varcharの目的は、将来、列サイズを拡張する準備とは関係ありません。ただし、フィールドの長さを増やすには、テーブルを変更するのがよいでしょう。

可変長の文字列を含むことができるフィールドには、varchar2データ型が使用されます。フィールドのサイズは、格納可能な最大文字数です。あなたの文字列がフィールドの長さを決して超えない限り、あなたは大丈夫でなければならず、まっすぐな文字を使うのに比べてスペースを節約するかもしれません。

長い文字列に対応するためにフィールド定義を拡張する必要がある場合は、ALTER TABLE ... MODIFY ...構文を使用できます。すでにテーブルに大量のデータがある場合、これはコストのかかる操作である可能性があることに注意してください。

ALTER TABLE 
    customer 
MODIFY 
    ( 
    cust_name varchar2(100) 
    ); 

Oracle Documentation of VARCHAR2 Hereを参照してください。

+0

は、既存のフィールドの長さを延長するか、または必要な長さの新しいフィールドを追加する方がコストがかかりますか? – jac

+0

既存のデータを保持する必要がある場合は、新しい列を追加した後、すべての行を適切な値に更新する必要があります。これは、インプレースの列を変更するよりもおそらく高価になります。一般に、混乱を避けるために、元の列を変更するだけでははっきりしない場合があります。 –

関連する問題