How can I determine string value of Oracle's datatype by its code? How can I determine string value of Oracle's datatype by its code? database database

How can I determine string value of Oracle's datatype by its code?


This is a slightly clunky solution, but you can use a CASE statement to "lookup" the datatype descriptions.

case record.col_type  when dbms_types.TYPECODE_DATE then 'DATE'               when dbms_types.TYPECODE_NUMBER then 'NUMBER'             when dbms_types.TYPECODE_RAW then 'RAW'                when dbms_types.TYPECODE_CHAR then 'CHAR'               when dbms_types.TYPECODE_VARCHAR2 then 'VARCHAR2'           when dbms_types.TYPECODE_VARCHAR then 'VARCHAR'            when dbms_types.TYPECODE_MLSLABEL then 'MLSLABEL'           when dbms_types.TYPECODE_BLOB then 'BLOB'               when dbms_types.TYPECODE_BFILE then 'BFILE'              when dbms_types.TYPECODE_CLOB then 'CLOB'                when dbms_types.TYPECODE_CFILE then 'CFILE'              when dbms_types.TYPECODE_TIMESTAMP then 'TIMESTAMP'          when dbms_types.TYPECODE_TIMESTAMP_TZ then 'TIMESTAMP_TZ'       when dbms_types.TYPECODE_TIMESTAMP_LTZ then 'TIMESTAMP_LTZ'      when dbms_types.TYPECODE_INTERVAL_YM then 'INTERVAL_YM'        when dbms_types.TYPECODE_INTERVAL_DS then 'INTERVAL_DS'        when dbms_types.TYPECODE_REF then 'REF'                when dbms_types.TYPECODE_OBJECT then 'OBJECT'             when dbms_types.TYPECODE_VARRAY then 'VARRAY'                         when dbms_types.TYPECODE_TABLE then 'TABLE'                          when dbms_types.TYPECODE_NAMEDCOLLECTION then 'NAMEDCOLLECTION'    when dbms_types.TYPECODE_OPAQUE then 'OPAQUE'                              when dbms_types.TYPECODE_NCHAR then 'NCHAR'              when dbms_types.TYPECODE_NVARCHAR2 then 'NVARCHAR2'         when dbms_types.TYPECODE_NCLOB then 'NCLOB'                    when dbms_types.TYPECODE_BFLOAT then 'BFLOAT'             when dbms_types.TYPECODE_BDOUBLE then 'BDOUBLE'            when dbms_types.TYPECODE_UROWID then 'UROWID'              end case

To get the values for this you should query the data dictionary as tbone suggests.


Look in DBMS_TYPES package (from my 11gr2):

select text from all_sourcewhere owner='SYS'and name='DBMS_TYPES'and type='PACKAGE';PACKAGE dbms_types AS  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 */  /* NOTE: These typecodes are for use in AnyData api only and are short forms     for the corresponding char typecodes with a charset form of SQLCS_NCHAR.  */  TYPECODE_NCHAR           PLS_INTEGER := 286;  TYPECODE_NVARCHAR2       PLS_INTEGER := 287;  TYPECODE_NCLOB           PLS_INTEGER := 288;  /* Typecodes for Binary Float, Binary Double and Urowid. */  TYPECODE_BFLOAT          PLS_INTEGER := 100;  TYPECODE_BDOUBLE         PLS_INTEGER := 101;  TYPECODE_UROWID          PLS_INTEGER := 104;  SUCCESS                  PLS_INTEGER := 0;  NO_DATA                  PLS_INTEGER := 100;

Also note that 109 is a user-defined type, you may need to use DESCRIBE_COLUMNS3 instead.


Use ANYDATA.GetTypeName

Here's a link with some explanation and an example: http://www.oracle-developer.net/display.php?id=218

And I quote:

SQL> DECLARE  2     v_anydata  ANYDATA := ANYDATA.ConvertVarchar2('String');  3     v_typename VARCHAR2(128);  4  BEGIN  5     v_typename := v_anydata.GetTypeName();  6     DBMS_OUTPUT.PUT_LINE('Type of ANYDATA instance is [' || v_typename || ']');  7  END;  8  /Type of ANYDATA instance is [SYS.VARCHAR2]PL/SQL procedure successfully completed.

Here are some examples of using this in a select.