Oracle 如何将数据类型映射到 CODE/IDs - 转储和 dbms_sql.define_column 生成数据类型代码
Oracle How to Map Data Types to CODE/IDs - Dump and dbms_sql.define_column produce data type codes
当使用 DUMP()
或使用 dbms_sql.define_column
时都 return Oracle 数据类型的代码。
是否有一个 MAP 将 Oracle 数据类型与其由 DUMP() 函数或 dbms_sql.define_column 功能 return 编辑的 Oracle 代码联系起来?
我正在寻找它来帮助测试以及定位自定义数据类型,例如 NESTED TABLE。嵌套的 table 存在于我的 table 之一中并生成数据类型代码 109。如何查找与类型代码 109 关联的类型?下面的转储和 dbms_sql.define_column.
示例
我必须假设这在数据库中可用以进行查询,因为当我编写查询时,我使用列类型的 'TEXT' 名称而不是代码来定义列。那么无论它们是 'built-in' 还是 'custom',我的数据类型的文本又名存储在哪里?它必须在某个地方。
转储
SELECT
DUMP(to_date('15-JAN-18'),10,1,1) AS date_type
, DUMP(123,10,1,1) AS num_type
, DUMP('abc',10,1,1) AS var_type
FROM dual
;
转储输出
/* OUTPUT:
|
| "DATE_TYPE" "NUM_TYPE" "VAR_TYPE"
|--------------------|-------------------|------------------
| "Typ=13 Len=8: 226" "Typ=2 Len=3: 194" "Typ=96 Len=3: 97"
*/
DBMS_SQL.DEFINE_COLUMN
... some code above ...
-- Define columns:
FOR i IN 1..n_colcnt
LOOP
dbms_output.put_line(v_desctab(i).col_name ||': ' || v_desctab(i).col_type);
IF v_desctab(i).col_type = 2
THEN dbms_sql.DEFINE_COLUMN(n_curid, i, v_num_var);
ELSIF v_desctab(i).col_type = 12 THEN
dbms_sql.define_column(n_curid, i, v_date_var);
ELSE
dbms_sql.define_column(n_curid, i, v_name_var, 50);
END IF;
END LOOP;
... some code below ...
DBMS_SQL.DEFINE_COLUMN 输出 - 输出列名称及其数据类型代码。我想要文本。
QUERY_ID: 2
OTHER_ID: 2
ACTIVE: 1
QUERY_NAME: 1
QUERY_DESC: 1
QUERY_DEF: 112
QUERY_TYPE: 2
CREATED: 12
UPDATED: 12
CREATED_BY: 2
UPDATED_BY: 2
One thing I have regarding a mapping of Oracle Data Types to their corresponding IDs is an excel file I continue to reference. I am hoping there is something I can query within Oracle to give me what I'm looking for rather than referencing an external document.
有 THIS link 但是当我正在寻找自定义类型并且它缺少 CODE 13 的文档时这对我没有帮助。
这是有人放在一起的另一个非常好的数据类型映射:Oracle Type Code Mappings
这里解释了类型:Oracle Built-in Datatypes。
类型 13,我认为,当 DATEs
不属于 table 时,它们是如何表示的。这是因为您使用的是 to_date
函数,因此它仅作为 in-memory 结构存在,我认为可能因体系结构而异。相反,tables 中的值通常以 platform-independent 的方式存储(无论如何,我很确定这对于数字类型是正确的)。 Reference.
create table t1 ( c1 date );
insert into t1 values ( sysdate );
commit;
SELECT
DUMP(sysdate,10) AS date_type
, dump(c1, 10) as date_table_type
FROM t1;
Typ=13 Len=8: 227,7,5,30,18,22,0,0
Typ=12 Len=7: 120,119,5,30,19,23,1
'in-built' 列表可以从 DBA_TAB_COLS_V$ 的视图文本中看到(它是 DBA_TAB_COLUMNS 等视图的基础)。 12.2 应该是这样的:
decode(c.type#, 1, decode(c.charsetform, 2, 'NVARCHAR2', 'VARCHAR2'),
2, decode(c.scale, null,
decode(c.precision#, null, 'NUMBER', 'FLOAT'),
'NUMBER'),
8, 'LONG',
9, decode(c.charsetform, 2, 'NCHAR VARYING', 'VARCHAR'),
12, 'DATE',
23, 'RAW', 24, 'LONG RAW',
58, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
69, 'ROWID',
96, decode(c.charsetform, 2, 'NCHAR', 'CHAR'),
100, 'BINARY_FLOAT',
101, 'BINARY_DOUBLE',
105, 'MLSLABEL',
106, 'MLSLABEL',
111, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
112, decode(c.charsetform, 2, 'NCLOB', 'CLOB'),
113, 'BLOB', 114, 'BFILE', 115, 'CFILE',
121, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
122, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
123, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
178, 'TIME(' ||c.scale|| ')',
179, 'TIME(' ||c.scale|| ')' || ' WITH TIME ZONE',
180, 'TIMESTAMP(' ||c.scale|| ')',
181, 'TIMESTAMP(' ||c.scale|| ')' || ' WITH TIME ZONE',
231, 'TIMESTAMP(' ||c.scale|| ')' || ' WITH LOCAL TIME ZONE',
182, 'INTERVAL YEAR(' ||c.precision#||') TO MONTH',
183, 'INTERVAL DAY(' ||c.precision#||') TO SECOND(' ||
c.scale || ')',
208, 'UROWID',
'UNDEFINED')
使用从这个 link (Oracle Type Code Mappings) 获得的数据,我决定创建自己的 table 并用 Oracle 数据类型填充它,将 Oracle 类型代码映射回它们的'TEXT' 数据类型。
也许有人会出现并展示一种无需此自定义解决方法即可根据代码获取 TYPE 名称的方法。现在这必须是我接受的答案,因为它让我尽可能接近我最初需要的东西。其他答案当然可以帮助我到达这里。不幸的是,它仍然无法取回代码为 109 的自定义类型的实际名称。
CREATE TABLE oracle_data_types
(
Data_Type VARCHAR2(100 CHAR),
Uniform_Type_Code NUMBER(10),
Oracle_Doc NUMBER(10),
DBMS_SQL NUMBER(10),
DBMS_TYPES_TYPECODE_PERC VARCHAR2(100 CHAR),
JDBC_java_sql_Types VARCHAR2(100 CHAR),
OCI VARCHAR2(100 CHAR),
DUMP NUMBER(10),
V$_SQL_BIND_DATA_DATATYPE NUMBER(10)
)
;
/
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('VARCHAR2',1,1,1,'9 VARCHAR2 1 VARCHAR','12 VARCHAR','1 SQLT_CHR',1,1);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('NVARCHAR2',1,1,1,'287 NVARCHAR2','12 VARCHAR','1 SQLT_CHR',1,1);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('NUMBER',2,2,2,'NUMBER','2 NUMERIC','2 SQLT_NUM',2,2);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('FLOAT',2,2,2,'2 NUMBER','2 NUMERIC','2 SQLT_NUM',2,2);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('LONG',8,8,8,'','-1 LONGVARCHAR','8 SQLT_LNG',NULL,8);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('DATE',12,12,12,'12 DATE','93 TIMESTAMP1','12 SQLT_DAT',12,12);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('BINARY_FLOAT',21,21,100,'100 BFLOAT','100','100 SQLT_IBFLOAT',100,100);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('BINARY_DOUBLE',22,22,101,'101 BDOUBLE','101','101 SQLT_IBFLOAT',101,101);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('TIMESTAMP',180,180,180,'187 TIMESTAMP','93 TIMESTAMP1','187 SQLT_TIMESTAMP',180,180);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('TIMESTAMP WITH TIME ZONE',181,181,181,'188 TIMESTAMP_TZ','-101','188 SQLT_TIMESTAMP_TZ',181,181);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('TIMESTAMP WITH LOCAL TIME ZONE',231,231,231,'232 TIMESTAMP_LTZ','-102','232 SQLT_TIMESTAMP_LTZ',231,231);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('INTERVAL YEAR TO MONTH',182,182,182,'189 INTERVAL_YM','-103','189 SQLT_INTERVAL_YM',182,182);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('INTERVAL DAY TO SECOND',183,183,183,'190 INTERVAL_DS','-104','190 SQLT_INTERVAL_DS',183,183);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('RAW',23,23,23,'95 RAW','-3 VARBINARY','23 SQLT_BIN',23,23);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('LONG RAW',24,24,24,'','-4 LONGVARBINARY','24 SQLT_LBI',NULL,24);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('ROWID',69,69,11,'','-8','104 SQLT_RDD',69,69);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('UROWID',208,208,208,'104 UROWID','-8','104 SQLT_RDD',208,208);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('CHAR',96,96,96,'96 CHAR','1 CHAR','96 SQLT_AFC',96,96);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('NCHAR',96,96,96,'286 NCHAR','1 CHAR','96 SQLT_AFC',96,96);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('CLOB',112,112,112,'112 CLOB','2005 CLOB','112 SQLT_CLOB',NULL,112);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('NCLOB',112,112,112,'288 NCLOB','2005 CLOB','112 SQLT_CLOB',NULL,112);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('BLOB',113,113,113,'113 BLOB','2004 BLOB','113 SQLT_BLOB',NULL,113);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('BFILE',114,114,114,'114 BFILE','-13','114 SQLT_BFILEE',NULL,114);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('XMLTYPE',109,NULL,109,'58 OPAQUE2','2007','108 SQLT_NTY',58,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('ANYDATA',109,NULL,109,'58 OPAQUE2','2007','108 SQLT_NTY',58,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('ANYDATASET',109,NULL,109,'58 OPAQUE2','2007','108 SQLT_NTY',58,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('ANYTYPE',109,NULL,109,'58 OPAQUE2','2007','108 SQLT_NTY',58,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('Object type',109,NULL,109,'108 OBJECT','2002 STRUCT','108 SQLT_NTY',121,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('VARRAY',109,NULL,109,'247 VARRAY','2003 ARRAY','108 SQLT_NTY',NULL,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('Nested table',109,NULL,109,'248 TABLE','2003 ARRAY','108 SQLT_NTY',NULL,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('REF',111,NULL,111,'110 REF','2006 REF','110 SQLT_REF',111,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('Strong REF CURSOR',102,NULL,102,'','-10','116 SQLT_RSET',102,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('Weak REF CURSOR',102,NULL,102,'','-10','116 SQLT_RSET',102,NULL);
数据截图供视觉参考
使用 sys.DBMS_TYPES 包的示例
To select the PL/SQL code directly from the package:
SELECT TEXT
FROM dba_source
WHERE name = 'DBMS_TYPES'
AND regexp_like(text, 'TYPECODE')
;
Using PL/SQL to pull the Constants out:
BEGIN
dbms_output.put_line(dbms_types.TYPECODE_CHAR ||' TYPECODE_DATE');
dbms_output.put_line(dbms_types.TYPECODE_NUMBER ||' TYPECODE_NUMBER');
dbms_output.put_line(dbms_types.TYPECODE_VARCHAR2 ||' TYPECODE_RAW');
dbms_output.put_line(dbms_types.TYPECODE_VARCHAR ||' TYPECODE_CHAR');
dbms_output.put_line(dbms_types.TYPECODE_RAW ||' TYPECODE_VARCHAR2');
dbms_output.put_line(dbms_types.TYPECODE_MLSLABEL ||' TYPECODE_VARCHAR');
dbms_output.put_line(dbms_types.TYPECODE_BLOB ||' TYPECODE_MLSLABEL');
dbms_output.put_line(dbms_types.TYPECODE_BFILE ||' TYPECODE_BLOB');
dbms_output.put_line(dbms_types.TYPECODE_CLOB ||' TYPECODE_BFILE');
dbms_output.put_line(dbms_types.TYPECODE_CFILE ||' TYPECODE_CLOB');
dbms_output.put_line(dbms_types.TYPECODE_TIMESTAMP ||' TYPECODE_CFILE');
dbms_output.put_line(dbms_types.TYPECODE_TIMESTAMP_TZ ||' TYPECODE_TIMESTAMP');
dbms_output.put_line(dbms_types.TYPECODE_TIMESTAMP_LTZ ||' TYPECODE_TIMESTAMP_TZ');
dbms_output.put_line(dbms_types.TYPECODE_INTERVAL_YM ||' TYPECODE_TIMESTAMP_LTZ');
dbms_output.put_line(dbms_types.TYPECODE_INTERVAL_DS ||' TYPECODE_INTERVAL_YM');
dbms_output.put_line(dbms_types.TYPECODE_REF ||' TYPECODE_INTERVAL_DS');
dbms_output.put_line(dbms_types.TYPECODE_OBJECT ||' TYPECODE_REF');
dbms_output.put_line(dbms_types.TYPECODE_VARRAY ||' TYPECODE_OBJECT');
dbms_output.put_line(dbms_types.TYPECODE_TABLE ||' TYPECODE_VARRAY');
dbms_output.put_line(dbms_types.TYPECODE_NAMEDCOLLECTION ||' TYPECODE_TABLE');
dbms_output.put_line(dbms_types.TYPECODE_DATE ||' TYPECODE_NAMEDCOLLECTION');
dbms_output.put_line(dbms_types.TYPECODE_OPAQUE ||' TYPECODE_OPAQUE');
dbms_output.put_line(dbms_types.TYPECODE_NCHAR ||' TYPECODE_NCHAR');
dbms_output.put_line(dbms_types.TYPECODE_NVARCHAR2 ||' TYPECODE_NVARCHAR2');
dbms_output.put_line(dbms_types.TYPECODE_NCLOB ||' TYPECODE_NCLOB');
dbms_output.put_line(dbms_types.TYPECODE_BFLOAT ||' TYPECODE_BFLOAT');
dbms_output.put_line(dbms_types.TYPECODE_BDOUBLE ||' TYPECODE_BDOUBLE');
dbms_output.put_line(dbms_types.TYPECODE_UROWID ||' TYPECODE_UROWID');
END;
输出
96 TYPECODE_DATE
2 TYPECODE_NUMBER
9 TYPECODE_RAW
1 TYPECODE_CHAR
95 TYPECODE_VARCHAR2
105 TYPECODE_VARCHAR
113 TYPECODE_MLSLABEL
114 TYPECODE_BLOB
112 TYPECODE_BFILE
115 TYPECODE_CLOB
187 TYPECODE_CFILE
188 TYPECODE_TIMESTAMP
232 TYPECODE_TIMESTAMP_TZ
189 TYPECODE_TIMESTAMP_LTZ
190 TYPECODE_INTERVAL_YM
110 TYPECODE_INTERVAL_DS
108 TYPECODE_REF
247 TYPECODE_OBJECT
248 TYPECODE_VARRAY
122 TYPECODE_TABLE
12 TYPECODE_NAMEDCOLLECTION
58 TYPECODE_OPAQUE
286 TYPECODE_NCHAR
287 TYPECODE_NVARCHAR2
288 TYPECODE_NCLOB
100 TYPECODE_BFLOAT
101 TYPECODE_BDOUBLE
104 TYPECODE_UROWID
使用DECODE函数代码直接拉出视图为ALL_TAB_COLUMNS
SELECT DISTINCT c.type# type_code,
decode(c.type#, 1, decode(c.charsetform, 2, 'NVARCHAR2', 'VARCHAR2'),
2, decode(c.scale, null, decode(c.precision#, null, 'NUMBER', 'FLOAT'), 'NUMBER'),
8, 'LONG',
9, decode(c.charsetform, 2, 'NCHAR VARYING', 'VARCHAR'),
12, 'DATE',
23, 'RAW', 24, 'LONG RAW',
69, 'ROWID',
96, decode(c.charsetform, 2, 'NCHAR', 'CHAR'),
100, 'BINARY_FLOAT',
101, 'BINARY_DOUBLE',
105, 'MLSLABEL',
106, 'MLSLABEL',
111, 'REF',
112, decode(c.charsetform, 2, 'NCLOB', 'CLOB'),
113, 'BLOB', 114, 'BFILE', 115, 'CFILE',
121, 'USER_TYPE',
122, 'USER_TYPE',
123, 'USER_TYPE',
178, 'TIME(' ||c.scale|| ')',
179, 'TIME(' ||c.scale|| ')' || ' WITH TIME ZONE',
180, 'TIMESTAMP(' ||c.scale|| ')',
181, 'TIMESTAMP(' ||c.scale|| ')'||' WITH TIME ZONE',
231, 'TIMESTAMP(' ||c.scale|| ')'||' WITH LOCAL TIME ZONE',
182, 'INTERVAL YEAR(' ||c.precision#||') TO MONTH',
183, 'INTERVAL DAY(' ||c.precision#||') TO SECOND(' ||
c.scale || ')',
208, 'UROWID',
'UNDEFINED') type_name
FROM sys.col$ c
ORDER BY c.type#
;
当使用 DUMP()
或使用 dbms_sql.define_column
时都 return Oracle 数据类型的代码。
是否有一个 MAP 将 Oracle 数据类型与其由 DUMP() 函数或 dbms_sql.define_column 功能 return 编辑的 Oracle 代码联系起来?
我正在寻找它来帮助测试以及定位自定义数据类型,例如 NESTED TABLE。嵌套的 table 存在于我的 table 之一中并生成数据类型代码 109。如何查找与类型代码 109 关联的类型?下面的转储和 dbms_sql.define_column.
示例我必须假设这在数据库中可用以进行查询,因为当我编写查询时,我使用列类型的 'TEXT' 名称而不是代码来定义列。那么无论它们是 'built-in' 还是 'custom',我的数据类型的文本又名存储在哪里?它必须在某个地方。
转储
SELECT
DUMP(to_date('15-JAN-18'),10,1,1) AS date_type
, DUMP(123,10,1,1) AS num_type
, DUMP('abc',10,1,1) AS var_type
FROM dual
;
转储输出
/* OUTPUT:
|
| "DATE_TYPE" "NUM_TYPE" "VAR_TYPE"
|--------------------|-------------------|------------------
| "Typ=13 Len=8: 226" "Typ=2 Len=3: 194" "Typ=96 Len=3: 97"
*/
DBMS_SQL.DEFINE_COLUMN
... some code above ...
-- Define columns:
FOR i IN 1..n_colcnt
LOOP
dbms_output.put_line(v_desctab(i).col_name ||': ' || v_desctab(i).col_type);
IF v_desctab(i).col_type = 2
THEN dbms_sql.DEFINE_COLUMN(n_curid, i, v_num_var);
ELSIF v_desctab(i).col_type = 12 THEN
dbms_sql.define_column(n_curid, i, v_date_var);
ELSE
dbms_sql.define_column(n_curid, i, v_name_var, 50);
END IF;
END LOOP;
... some code below ...
DBMS_SQL.DEFINE_COLUMN 输出 - 输出列名称及其数据类型代码。我想要文本。
QUERY_ID: 2
OTHER_ID: 2
ACTIVE: 1
QUERY_NAME: 1
QUERY_DESC: 1
QUERY_DEF: 112
QUERY_TYPE: 2
CREATED: 12
UPDATED: 12
CREATED_BY: 2
UPDATED_BY: 2
One thing I have regarding a mapping of Oracle Data Types to their corresponding IDs is an excel file I continue to reference. I am hoping there is something I can query within Oracle to give me what I'm looking for rather than referencing an external document.
有 THIS link 但是当我正在寻找自定义类型并且它缺少 CODE 13 的文档时这对我没有帮助。
这是有人放在一起的另一个非常好的数据类型映射:Oracle Type Code Mappings
这里解释了类型:Oracle Built-in Datatypes。
类型 13,我认为,当 DATEs
不属于 table 时,它们是如何表示的。这是因为您使用的是 to_date
函数,因此它仅作为 in-memory 结构存在,我认为可能因体系结构而异。相反,tables 中的值通常以 platform-independent 的方式存储(无论如何,我很确定这对于数字类型是正确的)。 Reference.
create table t1 ( c1 date );
insert into t1 values ( sysdate );
commit;
SELECT
DUMP(sysdate,10) AS date_type
, dump(c1, 10) as date_table_type
FROM t1;
Typ=13 Len=8: 227,7,5,30,18,22,0,0
Typ=12 Len=7: 120,119,5,30,19,23,1
'in-built' 列表可以从 DBA_TAB_COLS_V$ 的视图文本中看到(它是 DBA_TAB_COLUMNS 等视图的基础)。 12.2 应该是这样的:
decode(c.type#, 1, decode(c.charsetform, 2, 'NVARCHAR2', 'VARCHAR2'),
2, decode(c.scale, null,
decode(c.precision#, null, 'NUMBER', 'FLOAT'),
'NUMBER'),
8, 'LONG',
9, decode(c.charsetform, 2, 'NCHAR VARYING', 'VARCHAR'),
12, 'DATE',
23, 'RAW', 24, 'LONG RAW',
58, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
69, 'ROWID',
96, decode(c.charsetform, 2, 'NCHAR', 'CHAR'),
100, 'BINARY_FLOAT',
101, 'BINARY_DOUBLE',
105, 'MLSLABEL',
106, 'MLSLABEL',
111, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
112, decode(c.charsetform, 2, 'NCLOB', 'CLOB'),
113, 'BLOB', 114, 'BFILE', 115, 'CFILE',
121, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
122, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
123, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
178, 'TIME(' ||c.scale|| ')',
179, 'TIME(' ||c.scale|| ')' || ' WITH TIME ZONE',
180, 'TIMESTAMP(' ||c.scale|| ')',
181, 'TIMESTAMP(' ||c.scale|| ')' || ' WITH TIME ZONE',
231, 'TIMESTAMP(' ||c.scale|| ')' || ' WITH LOCAL TIME ZONE',
182, 'INTERVAL YEAR(' ||c.precision#||') TO MONTH',
183, 'INTERVAL DAY(' ||c.precision#||') TO SECOND(' ||
c.scale || ')',
208, 'UROWID',
'UNDEFINED')
使用从这个 link (Oracle Type Code Mappings) 获得的数据,我决定创建自己的 table 并用 Oracle 数据类型填充它,将 Oracle 类型代码映射回它们的'TEXT' 数据类型。
也许有人会出现并展示一种无需此自定义解决方法即可根据代码获取 TYPE 名称的方法。现在这必须是我接受的答案,因为它让我尽可能接近我最初需要的东西。其他答案当然可以帮助我到达这里。不幸的是,它仍然无法取回代码为 109 的自定义类型的实际名称。
CREATE TABLE oracle_data_types
(
Data_Type VARCHAR2(100 CHAR),
Uniform_Type_Code NUMBER(10),
Oracle_Doc NUMBER(10),
DBMS_SQL NUMBER(10),
DBMS_TYPES_TYPECODE_PERC VARCHAR2(100 CHAR),
JDBC_java_sql_Types VARCHAR2(100 CHAR),
OCI VARCHAR2(100 CHAR),
DUMP NUMBER(10),
V$_SQL_BIND_DATA_DATATYPE NUMBER(10)
)
;
/
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('VARCHAR2',1,1,1,'9 VARCHAR2 1 VARCHAR','12 VARCHAR','1 SQLT_CHR',1,1);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('NVARCHAR2',1,1,1,'287 NVARCHAR2','12 VARCHAR','1 SQLT_CHR',1,1);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('NUMBER',2,2,2,'NUMBER','2 NUMERIC','2 SQLT_NUM',2,2);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('FLOAT',2,2,2,'2 NUMBER','2 NUMERIC','2 SQLT_NUM',2,2);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('LONG',8,8,8,'','-1 LONGVARCHAR','8 SQLT_LNG',NULL,8);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('DATE',12,12,12,'12 DATE','93 TIMESTAMP1','12 SQLT_DAT',12,12);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('BINARY_FLOAT',21,21,100,'100 BFLOAT','100','100 SQLT_IBFLOAT',100,100);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('BINARY_DOUBLE',22,22,101,'101 BDOUBLE','101','101 SQLT_IBFLOAT',101,101);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('TIMESTAMP',180,180,180,'187 TIMESTAMP','93 TIMESTAMP1','187 SQLT_TIMESTAMP',180,180);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('TIMESTAMP WITH TIME ZONE',181,181,181,'188 TIMESTAMP_TZ','-101','188 SQLT_TIMESTAMP_TZ',181,181);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('TIMESTAMP WITH LOCAL TIME ZONE',231,231,231,'232 TIMESTAMP_LTZ','-102','232 SQLT_TIMESTAMP_LTZ',231,231);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('INTERVAL YEAR TO MONTH',182,182,182,'189 INTERVAL_YM','-103','189 SQLT_INTERVAL_YM',182,182);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('INTERVAL DAY TO SECOND',183,183,183,'190 INTERVAL_DS','-104','190 SQLT_INTERVAL_DS',183,183);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('RAW',23,23,23,'95 RAW','-3 VARBINARY','23 SQLT_BIN',23,23);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('LONG RAW',24,24,24,'','-4 LONGVARBINARY','24 SQLT_LBI',NULL,24);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('ROWID',69,69,11,'','-8','104 SQLT_RDD',69,69);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('UROWID',208,208,208,'104 UROWID','-8','104 SQLT_RDD',208,208);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('CHAR',96,96,96,'96 CHAR','1 CHAR','96 SQLT_AFC',96,96);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('NCHAR',96,96,96,'286 NCHAR','1 CHAR','96 SQLT_AFC',96,96);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('CLOB',112,112,112,'112 CLOB','2005 CLOB','112 SQLT_CLOB',NULL,112);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('NCLOB',112,112,112,'288 NCLOB','2005 CLOB','112 SQLT_CLOB',NULL,112);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('BLOB',113,113,113,'113 BLOB','2004 BLOB','113 SQLT_BLOB',NULL,113);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('BFILE',114,114,114,'114 BFILE','-13','114 SQLT_BFILEE',NULL,114);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('XMLTYPE',109,NULL,109,'58 OPAQUE2','2007','108 SQLT_NTY',58,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('ANYDATA',109,NULL,109,'58 OPAQUE2','2007','108 SQLT_NTY',58,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('ANYDATASET',109,NULL,109,'58 OPAQUE2','2007','108 SQLT_NTY',58,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('ANYTYPE',109,NULL,109,'58 OPAQUE2','2007','108 SQLT_NTY',58,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('Object type',109,NULL,109,'108 OBJECT','2002 STRUCT','108 SQLT_NTY',121,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('VARRAY',109,NULL,109,'247 VARRAY','2003 ARRAY','108 SQLT_NTY',NULL,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('Nested table',109,NULL,109,'248 TABLE','2003 ARRAY','108 SQLT_NTY',NULL,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('REF',111,NULL,111,'110 REF','2006 REF','110 SQLT_REF',111,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('Strong REF CURSOR',102,NULL,102,'','-10','116 SQLT_RSET',102,NULL);
INSERT INTO oracle_data_types (Data_Type, Uniform_Type_Code, Oracle_Doc, DBMS_SQL, DBMS_TYPES_TYPECODE_PERC, JDBC_java_sql_Types, OCI, DUMP, V$_SQL_BIND_DATA_DATATYPE) VALUES ('Weak REF CURSOR',102,NULL,102,'','-10','116 SQLT_RSET',102,NULL);
数据截图供视觉参考
使用 sys.DBMS_TYPES 包的示例
To select the PL/SQL code directly from the package:
SELECT TEXT
FROM dba_source
WHERE name = 'DBMS_TYPES'
AND regexp_like(text, 'TYPECODE')
;
Using PL/SQL to pull the Constants out:
BEGIN
dbms_output.put_line(dbms_types.TYPECODE_CHAR ||' TYPECODE_DATE');
dbms_output.put_line(dbms_types.TYPECODE_NUMBER ||' TYPECODE_NUMBER');
dbms_output.put_line(dbms_types.TYPECODE_VARCHAR2 ||' TYPECODE_RAW');
dbms_output.put_line(dbms_types.TYPECODE_VARCHAR ||' TYPECODE_CHAR');
dbms_output.put_line(dbms_types.TYPECODE_RAW ||' TYPECODE_VARCHAR2');
dbms_output.put_line(dbms_types.TYPECODE_MLSLABEL ||' TYPECODE_VARCHAR');
dbms_output.put_line(dbms_types.TYPECODE_BLOB ||' TYPECODE_MLSLABEL');
dbms_output.put_line(dbms_types.TYPECODE_BFILE ||' TYPECODE_BLOB');
dbms_output.put_line(dbms_types.TYPECODE_CLOB ||' TYPECODE_BFILE');
dbms_output.put_line(dbms_types.TYPECODE_CFILE ||' TYPECODE_CLOB');
dbms_output.put_line(dbms_types.TYPECODE_TIMESTAMP ||' TYPECODE_CFILE');
dbms_output.put_line(dbms_types.TYPECODE_TIMESTAMP_TZ ||' TYPECODE_TIMESTAMP');
dbms_output.put_line(dbms_types.TYPECODE_TIMESTAMP_LTZ ||' TYPECODE_TIMESTAMP_TZ');
dbms_output.put_line(dbms_types.TYPECODE_INTERVAL_YM ||' TYPECODE_TIMESTAMP_LTZ');
dbms_output.put_line(dbms_types.TYPECODE_INTERVAL_DS ||' TYPECODE_INTERVAL_YM');
dbms_output.put_line(dbms_types.TYPECODE_REF ||' TYPECODE_INTERVAL_DS');
dbms_output.put_line(dbms_types.TYPECODE_OBJECT ||' TYPECODE_REF');
dbms_output.put_line(dbms_types.TYPECODE_VARRAY ||' TYPECODE_OBJECT');
dbms_output.put_line(dbms_types.TYPECODE_TABLE ||' TYPECODE_VARRAY');
dbms_output.put_line(dbms_types.TYPECODE_NAMEDCOLLECTION ||' TYPECODE_TABLE');
dbms_output.put_line(dbms_types.TYPECODE_DATE ||' TYPECODE_NAMEDCOLLECTION');
dbms_output.put_line(dbms_types.TYPECODE_OPAQUE ||' TYPECODE_OPAQUE');
dbms_output.put_line(dbms_types.TYPECODE_NCHAR ||' TYPECODE_NCHAR');
dbms_output.put_line(dbms_types.TYPECODE_NVARCHAR2 ||' TYPECODE_NVARCHAR2');
dbms_output.put_line(dbms_types.TYPECODE_NCLOB ||' TYPECODE_NCLOB');
dbms_output.put_line(dbms_types.TYPECODE_BFLOAT ||' TYPECODE_BFLOAT');
dbms_output.put_line(dbms_types.TYPECODE_BDOUBLE ||' TYPECODE_BDOUBLE');
dbms_output.put_line(dbms_types.TYPECODE_UROWID ||' TYPECODE_UROWID');
END;
输出
96 TYPECODE_DATE
2 TYPECODE_NUMBER
9 TYPECODE_RAW
1 TYPECODE_CHAR
95 TYPECODE_VARCHAR2
105 TYPECODE_VARCHAR
113 TYPECODE_MLSLABEL
114 TYPECODE_BLOB
112 TYPECODE_BFILE
115 TYPECODE_CLOB
187 TYPECODE_CFILE
188 TYPECODE_TIMESTAMP
232 TYPECODE_TIMESTAMP_TZ
189 TYPECODE_TIMESTAMP_LTZ
190 TYPECODE_INTERVAL_YM
110 TYPECODE_INTERVAL_DS
108 TYPECODE_REF
247 TYPECODE_OBJECT
248 TYPECODE_VARRAY
122 TYPECODE_TABLE
12 TYPECODE_NAMEDCOLLECTION
58 TYPECODE_OPAQUE
286 TYPECODE_NCHAR
287 TYPECODE_NVARCHAR2
288 TYPECODE_NCLOB
100 TYPECODE_BFLOAT
101 TYPECODE_BDOUBLE
104 TYPECODE_UROWID
使用DECODE函数代码直接拉出视图为ALL_TAB_COLUMNS
SELECT DISTINCT c.type# type_code,
decode(c.type#, 1, decode(c.charsetform, 2, 'NVARCHAR2', 'VARCHAR2'),
2, decode(c.scale, null, decode(c.precision#, null, 'NUMBER', 'FLOAT'), 'NUMBER'),
8, 'LONG',
9, decode(c.charsetform, 2, 'NCHAR VARYING', 'VARCHAR'),
12, 'DATE',
23, 'RAW', 24, 'LONG RAW',
69, 'ROWID',
96, decode(c.charsetform, 2, 'NCHAR', 'CHAR'),
100, 'BINARY_FLOAT',
101, 'BINARY_DOUBLE',
105, 'MLSLABEL',
106, 'MLSLABEL',
111, 'REF',
112, decode(c.charsetform, 2, 'NCLOB', 'CLOB'),
113, 'BLOB', 114, 'BFILE', 115, 'CFILE',
121, 'USER_TYPE',
122, 'USER_TYPE',
123, 'USER_TYPE',
178, 'TIME(' ||c.scale|| ')',
179, 'TIME(' ||c.scale|| ')' || ' WITH TIME ZONE',
180, 'TIMESTAMP(' ||c.scale|| ')',
181, 'TIMESTAMP(' ||c.scale|| ')'||' WITH TIME ZONE',
231, 'TIMESTAMP(' ||c.scale|| ')'||' WITH LOCAL TIME ZONE',
182, 'INTERVAL YEAR(' ||c.precision#||') TO MONTH',
183, 'INTERVAL DAY(' ||c.precision#||') TO SECOND(' ||
c.scale || ')',
208, 'UROWID',
'UNDEFINED') type_name
FROM sys.col$ c
ORDER BY c.type#
;