sql >> データベース >  >> RDS >> Oracle

Oracle varchar2に定義パラメータとして必須のサイズがあるのはなぜですか?

    いいえ、まったく同じではありません。

    1. 列の長さは、開発者が画面を作成するのに役立つメタデータです。
    2. 同様に、TOADやSQL Developerなどの自動クエリツールは、結果をレンダリングするときに列の長さを使用します。
    3. データベースは、PL/SQLコレクションにメモリを割り当てるときに変数の長さを使用します。そのメモリがPGAから出てくると、変数宣言をスーパーサイズ化すると、サーバーのメモリが不足したためにプログラムが失敗する可能性があります。
    4. PL / SQLプログラムでの単一変数の宣言にも同様の問題があります。それは、コレクションが問題を増大させる傾向があるということだけです。
    5. 特大の列は、複合インデックスに問題を引き起こします。以下は、8Kブロックのデータベース上にあります

    ....

    SQL> create table t23 (col1 varchar2(4000), col2 varchar2(4000))
      2  /
    
    Table created.
    
    SQL> create index t23_i on t23(col1,col2)
      2  /
    create index t23_i on t23(col1,col2)
                          *
    ERROR at line 1:
    ORA-01450: maximum key length (6398) exceeded
    
    
    SQL>
    

    しかし何よりも、列のサイズはエラーチェックの一形態です。列の長さが10文字で、オートノミックプロセスが1000文字を読み込もうとしている場合は、問題が発生しています。プロセスは失敗するはずなので、ダフデータをロードしている理由を調査できます。別の方法は、ゴミでいっぱいのデータベースです。それが必要な場合は、すべての人にExcelを渡して、それを実行する必要がありました。

    過小評価していることが判明したときに列サイズを変更するのは面倒な場合があることは事実です。ただし、それほど頻繁には発生しません。変数の長さをハードコーディングする代わりに、PL / SQLで%TYPEおよびSUBTYPE宣言を使用することで、多くの問題を軽減できます。

    数字が違います。まず、数値の最大サイズは、同等のテキスト(38桁の精度が保証されている)よりもはるかに小さくなります。

    ただし、主な違いは、Oracleが数値をに格納することです。科学的記数法 したがって、数値の算術サイズとそれが消費するストレージスペースとの間に直接的な関係はありません。

    SQL> select vsize(123456789012345678901) n1
      2         , vsize(999999999999999999999999999999) n2
      3         , vsize(0.000000000000000000001) n3
      4         , vsize(1000000000000000000000000) n4
      5  from dual
      6  /
    
            N1         N2         N3         N4
    ---------- ---------- ---------- ----------
            12         16          2          2
    
    SQL> 
    

    それでも、特に整数、たとえば、またはお金を扱う場合は、可能な限りスケールと精度を指定することをお勧めします。



    1. Microsoft SQLServerからOracleデータへの移行(変換)(他のRDBMSもOK)

    2. Apache DDLUtilsを使用せずに、JDBCを使用してスキーマをあるデータベースから別のデータベースにコピーするにはどうすればよいですか?

    3. Railsモデルへの外部キーの追加

    4. REGEXP_REPLACEおよびPL/SQLを使用しないUUID文字列のフォーマット