いいえ、まったく同じではありません。
- 列の長さは、開発者が画面を作成するのに役立つメタデータです。
- 同様に、TOADやSQL Developerなどの自動クエリツールは、結果をレンダリングするときに列の長さを使用します。
- データベースは、PL/SQLコレクションにメモリを割り当てるときに変数の長さを使用します。そのメモリがPGAから出てくると、変数宣言をスーパーサイズ化すると、サーバーのメモリが不足したためにプログラムが失敗する可能性があります。
- PL / SQLプログラムでの単一変数の宣言にも同様の問題があります。それは、コレクションが問題を増大させる傾向があるということだけです。
- 特大の列は、複合インデックスに問題を引き起こします。以下は、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>
それでも、特に整数、たとえば、またはお金を扱う場合は、可能な限りスケールと精度を指定することをお勧めします。