查询dba_constraints

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)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值