dba_constraints中有一字段为long,查询麻烦,现找了个笨办法转为clob,希望能引出更好的办法
CREATE OR REPLACE PACKAGE pkg_test IS
TYPE obj_constraints IS RECORD(
owner dba_constraints.owner%TYPE,
constraint_name dba_constraints.constraint_name%TYPE,
constraint_type dba_constraints.constraint_type%TYPE,
table_name dba_constraints.table_name%TYPE,
search_condition CLOB,
r_owner dba_constraints.r_owner%TYPE,
r_constraint_name dba_constraints.r_constraint_name%TYPE,
delete_rule dba_constraints.delete_rule%TYPE,
status dba_constraints.status%TYPE,
deferrable dba_constraints.deferrable%TYPE,
deferred dba_constraints.deferred%TYPE,
validated dba_constraints.validated%TYPE,
generated dba_constraints.generated%TYPE,
bad dba_constraints.bad%TYPE,
rely dba_constraints.rely%TYPE,
last_change dba_constraints.last_change%TYPE,
index_owner dba_constraints.index_owner%TYPE,
index_name dba_constraints.index_name%TYPE,
invalid dba_constraints.invalid%TYPE,
view_related dba_constraints.view_related%TYPE);
TYPE tbl_constraints IS TABLE OF obj_constraints;
FUNCTION get_constraints RETURN tbl_constraints
PIPELINED;
END pkg_test;
/
CREATE OR REPLACE PACKAGE BODY pkg_test IS
FUNCTION get_constraints RETURN tbl_constraints
PIPELINED IS
s VARCHAR(8000);
v_row1 dba_constraints%ROWTYPE;
v_row2 obj_constraints;
cur SYS_REFCURSOR;
BEGIN
s := 'SELECT * FROM dba_constraints';
OPEN cur FOR s;
LOOP
FETCH cur
INTO v_row1;
EXIT WHEN cur%NOTFOUND;
v_row2.owner := v_row1.owner;
v_row2.constraint_name := v_row1.constraint_name;
v_row2.constraint_type := v_row1.constraint_type;
v_row2.table_name := v_row1.table_name;
v_row2.search_condition := to_clob(v_row1.search_condition);
v_row2.r_owner := v_row1.r_owner;
v_row2.r_constraint_name := v_row1.r_constraint_name;
v_row2.delete_rule := v_row1.delete_rule;
v_row2.status := v_row1.status;
v_row2.deferrable := v_row1.deferrable;
v_row2.deferred := v_row1.deferred;
v_row2.validated := v_row1.validated;
v_row2.generated := v_row1.generated;
v_row2.bad := v_row1.bad;
v_row2.rely := v_row1.rely;
v_row2.last_change := v_row1.last_change;
v_row2.index_owner := v_row1.index_owner;
v_row2.index_name := v_row1.index_name;
v_row2.invalid := v_row1.invalid;
v_row2.view_related := v_row1.view_related;
PIPE ROW(v_row2);
END LOOP;
CLOSE cur;
RETURN;
END;
END pkg_test;
/
SELECT * FROM table(pkg_test.get_constraints)