#DBMS_PICKLER
DBMS_PICKLER包提供了一个内置的函数,用于查询UDT元数据信息。
# GET_TYPE_SHAPE
DBMS_PICKLER.GET_TYPE_SHAPE (
FULLTYPENAME IN VAECHAR,
TYPOID OUT BIGINT,
VERSION OUT INT,
TDS OUT RAW,
INSTANTIABLE OUT VARCHAR,
SUPERTYPE_OWNER OUT VARCHAR,
SUPERTYPE_NAME OUT VARCHAR,
ATTR_RC OUT SYS_REFCURSOR,
SUBTYPE_RC OUT SYS_REFCURSOR
) return INT;
GET_TYPE_SHAPE函数实现了从SYS.USER$
等基础表中查询类型信息及其子类型信息。
函数参数信息:
参数 | 描述 | 类型 | IN/OUT |
---|---|---|---|
返回值 | tdsFlag,标识TDS数据是否通过LOB发送,非0表示LOB发送。 | INT | OUT |
FULLTYPENAME | 自定义类型全名称,oracle将其作为in参数。 | VARCHAR | IN/OUT |
TYPOID | 自定义类型 oid。 | BIGINT | OUT |
VERSION | 类型版本号, alter type 后自增,初始版本为1。 | INT | OUT |
TDS | Type Descriptor Source ,包含 attr numbers ,n个属性type code ;如果tdsFlag 为1,标识该字段是LOB发送。 | RAW | OUT |
INSTANTIABLE | 是否可实例化,通常为YES。 | VARCHAR | OUT |
SUPERTYPE_OWNER | 父类型所属schema。 | VARCHAR | OUT |
SUPERTYPE_NAME | 父类型名称。 | VARCHAR | OUT |
ATTR_RC | 属性元数据信息 cursor。 | SYS_REFCURSOR | OUT |
SUBTYPE_RC | 子类型元数据信息cursor。 | SYS_REFCURSOR | OUT |
ATTR_RC属性元数据信息:
字段 | 说明 |
---|---|
1 | 固定值,1,image format 。 |
NAME | 属性名称。 |
ATTRIBUTE | 属性序号,表示类型的第几个属性;从1开始。 |
DTypeName | 类型名称,例如VARCHAR2,NUMBER,NVARCHAR2,CLOB。 |
USER.NAME | 属性类型(是自定义类型)owner的名称,普通类型为null。 |
ATTR_TOID | 属性的type id ,如果属性类型也是自定义类型。 |
ATTRTYPINS | 类型是否可实例化,通常都是YES。 |
SUP_TYP_OWNER | 父类型的schema,如果属性类型有父类型。 |
SUP_TYP_NAME | 父类型的type name ,如果属性类型有父类型。 |
SUBTYPE_RC子类型元数据信息:
字段 | 说明 |
---|---|
1 | 固定值,1,image format 。 |
NAME | 子类型owner的名称。 |
NAME | 子类型名称。 |
OID | 子类型的type oid 。 |
示例:
-- 创建UDT类型
CREATE OR replace TYPE SALES.UDT_VARRAY_TYP IS object(id INT, value VARCHAR(20));
/
-- 启用dbms_output
SET serveroutput ON;
-- 匿名块
DECLARE
tds_flag INT;
full_type_name VARCHAR(255) := 'SALES.UDT_VARRAY_TYP';
typeoid BIGINT;
version INT;
tds RAW(8000);
instantiable VARCHAR(255);
sup_owner VARCHAR(255);
sup_name VARCHAR(255);
attr_rc SYS_REFCURSOR;
subtype_rc SYS_REFCURSOR;
BEGIN
tds_flag := sys.dbms_pickler.get_type_shape(full_type_name, typeoid, version, tds, instantiable, sup_owner, sup_name, attr_rc, subtype_rc);
DBMS_OUTPUT.PUT_LINE('tds flag: ' || tds_flag);
DBMS_OUTPUT.PUT_LINE(' full_type_name: ' || full_type_name);
DBMS_OUTPUT.PUT_LINE(' typeoid: ' || typeoid);
DBMS_OUTPUT.PUT_LINE(' version: ' || version);
DBMS_OUTPUT.PUT_LINE(' tds: ' || tds);
DBMS_OUTPUT.PUT_LINE(' instantiable: ' || instantiable);
DBMS_OUTPUT.PUT_LINE(' sup_owner: ' || sup_owner);
DBMS_OUTPUT.PUT_LINE(' sup_name: ' || sup_name);
DBMS_SQL.RETURN_RESULT(attr_rc);
DBMS_SQL.RETURN_RESULT(subtype_rc);
END;
/
-- result
tds flag: 0
full_type_name: SALES.UDT_VARRAY_TYP
typeoid: 65581
version: 1
tds: 1C0000000000000001020004000100000000001A0002000000000000
instantiable: YES
sup_owner:
sup_name:
ResultSet #1
1 NAME ATTRIBUTE# DECODE(A.ATTR_TOID,0 DECODE(BITAND(A.PROP
ATTR_TOID ATTRTYPINS SUP_TYP_OWNER SUP_TYP_NAME
------------ ---------------------------------------------------------------- ------------ ---------------------------------------------------------------- ---------------------------------------------------------------- --------------------- ---------- ---------------------------------------------------------------- ----------------------------------------------------------------
1 ID 1 INTEGER
4 YES
1 VALUE 2 VARCHAR
26 YES
ResultSet #2
1 NAME NAME TOID
------------ ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------