OCI8::Metadata::Column
列の情報
(new in 1.0.0 without rc)
インスタンスメソッド
name
列名
type_string
列定義を文字列で戻す。
con = OCI8.new('username/password')
colinfo = con.describe_table('tab').columns
colinfo[0].type_string #=> "VARCHAR2(30) NOT NULL"
colinfo[1].type_string #=> "VARCHAR2(7)"
colinfo[2].type_string #=> "NUMBER"
data_type
列のデータ型を Symbol で戻す。
| Oracle type | data_type |
|---|---|
| CHAR, NCHAR | :char |
| VARCHAR2, NVARCHAR2 | :varchar2 |
| RAW | :raw |
| CLOB, NCLOB | :clob |
| BLOB | :blob |
| BFILE | :bfile |
| NUMBER, FLOAT | :number |
| BINARY_FLOAT | :binary_float |
| BINARY_DOUBLE | :binary_double |
| DATE | :date |
| TIMESTAMP | :timestamp |
| TIMESTAMP WITH TIME ZONE | :timestamp_tz |
| TIMESTAMP WITH LOCAL TIME ZONE | :timestamp_ltz |
| INTERVAL YEAR TO MONTH | :interval_ym |
| INTERVAL DAY TO SECOND | :interval_ds |
charset_form
キャラクタセットの種類(デフォルトか、各国語か)
| Oracle type | char_form |
|---|---|
| CHAR(n) | :implicit |
| VARCHAR2(n) | :implicit |
| CHAR(n CHAR) | :implicit |
| VARCHAR2(n CHAR) | :implicit |
| NCHAR(n) | :nchar |
| NVARCHAR2(n) | :nchar |
| Others | nil |
nullable?
NULL値を含める場合は true, それ以外は false
char_used?
長さの指定が文字単位の場合は true, それ以外は false.
| Oracle type | char_used? |
|---|---|
| CHAR(n) | false |
| VARCHAR2(n) | false |
| CHAR(n CHAR) | true |
| VARCHAR2(n CHAR) | true |
| NCHAR(n) | true |
| NVARCHAR2(n) | true |
char_size
文字列データ型の長さ。char_used? が true の場合は文字単位、false の場合はバイト単位。
| Oracle type | char_size |
|---|---|
| CHAR(n) | n |
| VARCHAR2(n) | n |
| CHAR(n CHAR) | n |
| VARCHAR2(n CHAR) | n |
| NCHAR(n) | n |
| NVARCHAR2(n) | n |
data_size
バイト単位でのデータの最大長。
予想ですが、クライアント側での長さではなくて、Oracle内部で使用するデータの最大長と思われる。
| Oracle tyep | data_size |
|---|---|
| CHAR(n), VARCHAR2(n) | n |
| CHAR(n CHAR), VARCHAR2(n CHAR) | n の整数倍(私の環境では4倍) |
| NCHAR(n), NVARCHAR2(n) | n の整値倍(私の環境では2倍) |
| NUMBER, FLOAT | 22 |
| BINARY_FLOAT | 4 |
| BINARY_DOUBLE | 8 |
| DATE | 7 |
| TIMESTAMP | 11 |
| TIMESTAMP WITH TIME ZONE | 13 |
| TIMESTAMP WITH LOCAL TIME ZONE | 11 |
precision
数値型の精度。NUMBER の場合10進数での桁数、FLOATの場合は 2進数での桁数。FLOATの精度に 0.30103 を掛けるとNUMBERでの精度になります。この値が 0 のときは、精度と小数点以下桁数の両方共無指定の NUMBER 型となります。
| Oracle type | precision |
|---|---|
| NUMBER | 0 |
| NUMBER(n) | n |
| NUMBER(m, n) | m |
| FLOAT | 126 |
| FLOAT(n) | n |
scale
小数点以下の桁数。precision が 0以外で scale が -127 のときは FLOAT。それ以外は NUMBER。
| Oracle type | scale |
|---|---|
| NUMBER | -127 or 0 |
| NUMBER(n) | 0 |
| NUMBER(m, n) | n |
| FLOAT | -127 |
| FLOAT(n) | -127 |
fsprecision
小数秒精度(fractional seconds precision)
| Oracle type | fsprecision |
|---|---|
| TIMEPTAMP(n) | n |
| TIMESTAMP(n) WITH TIME ZONE | n |
| TIMESTAMP(n) WITH LOCAL TIME ZONE | n |
| INTERVAL DAY(m) TO SECOND(n) | n |
lfprecision
先行フィールド精度(leading field precision)
| Oracle type | lfprecision |
|---|---|
| INTERVAL YEAR(n) TO MONTH | n |
| INTERVAL DAY(m) TO SECOND(n) | m |
Keyword(s):
References:[SideMenu] [ruby-oci8 API] [OCI8::Metadata::Table] [OCI8::Cursor] [OCI8::Metadata::View]