PL/SQL 変数のデータタイプ 、PL/SQL 固有のデータタイプ
PL/SQL はデータベースに格納できるデータタイプとは種類や精度が異なるものある。
データベースのデータの内部構造と PL/SQL のデータの格納構造の違いはわかりません。( DUMP 関数が使用できないため )
SYS.ANY DATA 型のタイプコードの多くがデータベースのそれと一致しないところからみると、内部では違う形式で格納されていることを連想させる。
参照: データベース上のデータタイプ / コレクション(配列)型 / レコード型
PL/SQL 変数のデータタイプ一覧
データタイプ | PL/SQL におけるデータタイプ | DB に格納可能なタイプ |
CHAR | 32767 バイト | 2000 バイト |
VARCHAR2 | 32767 バイト | 4000 バイト (※1) 32767 バイト |
└ RAW | 32767 バイト | 2000 バイト (※1) 32767 バイト |
NCHAR | 32767 バイト | 2000 バイト |
NVARCHAR2 | 32767 バイト | 4000 バイト (※1) 32767 バイト |
LONG*1 | 32760 バイト | 2G - 1 バイト |
LONG RAW | 32760 バイト | 4G - 1 バイト |
NUMBER | 38 桁 (1E-130 以上 1E126 未満) (※2) |
├ DEC | NUMBER のサブタイプ 固定小数点( 38桁 ) | - |
├ DECIMAL |
├ NUMERIC |
├ FLOAT | 浮動小数点 ( 約 38桁 ) |
├ DOUBLE PRECISION |
└ REAL | 浮動小数点 ( 約 18桁*2 ) |
PLS_INTEGER | -2^31 〜 2^31-1 マシン算術演算を使用するため変数として2番目に高速 |
SIMPLE_INTEGER | -2^31 〜 2^31-1 ネイティブコンパイル向けに用意された型。NULL やオーバーフローチェックなし。最も高速 |
BINARY_INTEGER | -2^31 〜 2^31-1 (約 ± 21 億) 10.1 以降 PLS_INTEGER と同一化される | - |
├ NATURAL | 自然数( 0 以上の整数 ) |
├ NATURALN | NATURAL に NOT NULL |
├ POSITIVE | 正数( 1 以上の整数 ) |
├ POSITIVEN | POSITIVE に NOT NULL |
└ SIGNTYPE | {-1, 0, 1} |
BINARY_FLOAT | | |
BINARY_DOUBLE | | |
DATE | 年月日・時分秒 |
TIMESTAMP | 年月日・時分秒+小数秒(最大 9桁) |
INTERVAL YEAR TO MONTH | 期間 年、月、日、時、分、秒 |
INTERVAL DAY TO SECOND |
LOB | |
├ CLOB | (4G -1)×ブロックサイズ 4G |
├ NCLOB |
├ BLOB |
└ BFILE | 4G バイト*3 |
BOOLEAN | TRUE、FALSE、(NULL) | - |
(※1) Oracle 12c において、初期化パラメータ COMPATIBLE = 12.0.0.0以上、MAX_STRING_SIZE = EXTENDED でデータベースを構築またはアップグレードしておく必要がある。従来型と異なる表外格納形式、索引が桁あふれから特殊な方式になることもあってか現行のデフォルト設定ではない。(Oracle12c R2 時点)
(※2) NUMBER 型を精度の指定なしで宣言すると 38 桁保証の精度(プラットフォームによって 39 または 40 桁以内)であるが PL/SQL で NUMBER(*,n) 形式は使用できない。 (Oracle 12c 時点)
ANYDATA 型のタイプコード 識別子
ANYDATA 型 のタイプコードの一部(データベースに格納できるデータのタイプコード )
コード | データタイプ |
1 | VARCHAR2 |
NVARCHAR2 |
2 | NUMBER |
8 | LONG |
12 | DATE |
21 | BINARY_FLOAT |
22 | BINARY_DOUBLE |
23 | RAW |
24 | LONG RAW |
69 | ROWID |
96 | CHAR |
NCHAR |