【问题标题】:Oracle built-in datatypes system viewOracle 内置数据类型系统视图
【发布时间】:2017-07-26 14:53:59
【问题描述】:

伙计们!

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

例子:

SELECT DUMP ('HASAN') FROM DUAL;

返回

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

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

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

它存在吗?

【问题讨论】:

  • 参见dba_objects 表中的object_iddata_object_id。默认情况下,字符串文字应为 char,除非您更改 nls_settings。
  • 不幸的是,没有任何类型的 object_id 或 data_object_id 为 96 :(
  • 我不相信数据字典中存在。我想您可以建立自己的查找表,从from the documented types 开始,但该列表并不完整。例如,还有其他日期类型;转储sysdate 以查看文档中未包含的内容。 (还有几个herehere。)
  • SELECT t.typecode, name FROM sys.type$ t, sys.obj$ o AND t.toid = o.oid$ and t.typecode = 96;
  • @fg78nc - 我的立场是正确的 *8-) 很好。只是一个观察,它没有显示 NCHAR 或 NVARCHAR2..

标签: sql oracle database-administration


【解决方案1】:
  SELECT t.typecode, name
  FROM sys.type$ t, sys.obj$ o
  WHERE t.toid = o.oid$ and t.typecode = 96;

【讨论】:

  • 没错!非常感谢!
  • @HasanAlizada Buyur
【解决方案2】:

您也可以查看 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 中使用。因此,这些数字略有不同。

【讨论】:

    【解决方案3】:

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

    SELECT * FROM dba_types WHERE predefined = 'YES';
    

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

    不管怎样,它应该让你知道去哪里看,虽然我不确定你为什么想看?

    注意如果你想查看字典表的列表,你可以这样做:

    select * from dictionary;
    

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

    【讨论】:

    • 已过滤。未找到与此问题相关的任何内容。似乎,这是唯一的记录。它不存在任何视图。
    • @HasanAlizada 检查我的答案,它确实返回了所需的信息。
    猜你喜欢
    • 1970-01-01
    • 2016-12-25
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多