Oracle查询表名和各表列名和每列的值

DECLARE
  v_tname all_tables.table_name%TYPE; -- 定义变量
  v_row all_tables.num_rows%TYPE;
  v_sql        VARCHAR2(1000);
  cursor tname is select table_name from all_tables where table_name like 'CP_%';
  v_lname VARCHAR2(200);
  v_datatype VARCHAR2(200);
  v_lvalue VARCHAR2(1000);
BEGIN
  open tname;
  loop
    fetch tname into v_tname;
    exit when tname%notfound;
    v_sql := 'SELECT COUNT(*) FROM ' || v_tname; 
    EXECUTE IMMEDIATE v_sql INTO v_row;
    DBMS_OUTPUT.PUT_LINE('表名: ' || v_tname || '   行数: ' || TO_CHAR(v_row));
    DECLARE
      cursor lname is SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = v_tname;
    BEGIN
      open lname;
      loop 
        fetch lname into v_lname;
        exit when lname%notfound;
        if v_row > 0 then          
          v_sql := 'SELECT DATA_TYPE FROM all_tab_columns WHERE table_name = ''' || v_tname ||''' AND column_name = '''|| v_lname ||'''';
          -- DBMS_OUTPUT.PUT_LINE(v_sql);          
          EXECUTE IMMEDIATE v_sql INTO v_datatype;
          if v_datatype != 'CLOB' then
            v_sql := 'SELECT SUBSTR(TO_CHAR(' || v_lname || '),1,150) FROM ' || v_tname || ' where ROWNUM = 1'; 
            EXECUTE IMMEDIATE v_sql INTO v_lvalue;
          else
            v_lvalue := 'CLOB';
          end if;
        else
          v_lvalue := '';
        end if;
        DBMS_OUTPUT.PUT_LINE('列名: ' || v_lname || '   列值: ' || TO_CHAR(v_lvalue));
      end loop;
      close lname;
    END;
  end loop;
  close tname;
END;

用于查询GP_开头的所有表的表名,行数,和各个表的列名,每列是什么数据,用于了解数据库情况。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值