Oracle 内置数据类型系统视图

Oracle built-in datatypes system view

各位!

有人知道 Oracle 内置数据类型系统字典视图吗?

示例:

SELECT DUMP ('HASAN') FROM DUAL;

returns

Typ=96 Len=5: 72,65,83,65,78

Oracle 文档说它是 CHAR 或 NCHAR 数据类型。

但是有没有视图,我可以在其中通过返回的代码 (Typ=96) 找到该数据类型?

它存在吗?

有DBA_TYPEs,它有一个预定义的列,例如:

SELECT * FROM dba_types WHERE predefined = 'YES';

其中似乎包含一些明显的类型(例如 NUMBER、VARCHAR2 等),但我不想说这是排他性的(例如,ANYDATA 数据类型预定义 = NO)。

无论如何,它应该让您知道在哪里看,虽然我不确定您为什么要看?

N.B。如果你想查看字典 tables 的列表,你可以这样做:

select * from dictionary;

如果您不记得确切的 table 姓名,您可以酌情过滤!

  SELECT t.typecode, name
  FROM sys.type$ t, sys.obj$ o
  WHERE t.toid = o.oid$ and t.typecode = 96;

您还可以查看 DBMS_TYPES 包的源代码

select TEXT 
from dba_source 
where name = 'DBMS_TYPES' 
    and regexp_like(text, 'TYPECODE');


TYPECODE_DATE            PLS_INTEGER :=  12;
TYPECODE_NUMBER          PLS_INTEGER :=   2;
TYPECODE_RAW             PLS_INTEGER :=  95;
TYPECODE_CHAR            PLS_INTEGER :=  96;
TYPECODE_VARCHAR2        PLS_INTEGER :=   9;
TYPECODE_VARCHAR         PLS_INTEGER :=   1;
TYPECODE_MLSLABEL        PLS_INTEGER := 105;
TYPECODE_BLOB            PLS_INTEGER := 113;
TYPECODE_BFILE           PLS_INTEGER := 114;
TYPECODE_CLOB            PLS_INTEGER := 112;
TYPECODE_CFILE           PLS_INTEGER := 115;
TYPECODE_TIMESTAMP       PLS_INTEGER := 187;
TYPECODE_TIMESTAMP_TZ    PLS_INTEGER := 188;
TYPECODE_TIMESTAMP_LTZ   PLS_INTEGER := 232;
TYPECODE_INTERVAL_YM     PLS_INTEGER := 189;
TYPECODE_INTERVAL_DS     PLS_INTEGER := 190;
TYPECODE_REF             PLS_INTEGER := 110;
TYPECODE_OBJECT          PLS_INTEGER := 108;
TYPECODE_VARRAY          PLS_INTEGER := 247;            /* COLLECTION TYPE */
TYPECODE_TABLE           PLS_INTEGER := 248;            /* COLLECTION TYPE */
TYPECODE_NAMEDCOLLECTION PLS_INTEGER := 122;
TYPECODE_OPAQUE          PLS_INTEGER := 58;                 /* OPAQUE TYPE */
TYPECODE_NCHAR           PLS_INTEGER := 286;
TYPECODE_NVARCHAR2       PLS_INTEGER := 287;
TYPECODE_NCLOB           PLS_INTEGER := 288;
TYPECODE_BFLOAT          PLS_INTEGER := 100;
TYPECODE_BDOUBLE         PLS_INTEGER := 101;
TYPECODE_UROWID          PLS_INTEGER := 104;

注意,DBMS_TYPES 中的数字与 PL/SQL 相关。但是,DUMP 是一个 SQL 函数,您不能在 PL/SQL 中使用它。因此这些数字略有不同。