Oracle打印用户下所有的表的表名,字段名,以及前十条数据

Oracle打印用户下所有的表的表名,字段名,以及前十条数据

工作中遇到这样一个需求

打印出scott用户下所有表的表名,字段名,以及每张表的前十条数据。

分析

1.先在user_tables循环打印表名
2.在1的条件下打印字段名
3.在1的条件下,紧跟2打印

效果图

只显示了两张表的数据

PL/SQL代码

(不知道怎么设置代码格式,显示有点问题,直接全部复制到plsqldevelop上跑就可以了)

--SP_LAJI_01为主存储过程,先跑FC_LAJI_01,再跑SP_LAJI_04,最后跑SP_LAJI_01
create or replace procedure SP_LAJI_01
as
cursor cur1 is select table_name from user_tables;
cursor cur2 is select table_name,COLUMN_NAME from user_tab_columns ;
begin
  for x in cur1 loop
      dbms_output.put_line(x.table_name);
      for y in cur2 loop
          if x.table_name=y.table_name then
            dbms_output.put(y.COLUMN_NAME||'    ');
            end if;
      end loop;
  dbms_output.put_line('');
  SP_LAJI_04(x.table_name);

  end loop;
end;
------
call SP_LAJI_01();
-----
CREATE OR REPLACE PROCEDURE SP_LAJI_04(TNAME VARCHAR2) AS
  V_SQL VARCHAR2(3000);
  CUR1 SYS_REFCURSOR;
  TYPE COLCON IS TABLE OF VARCHAR2(100)/*USER_TAB_COLUMNS.TABLE_NAME%TYPE*/;
  COLS COLCON;
  col_length NUMBER;
BEGIN
  OPEN CUR1 FOR
    SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = TNAME;
  FETCH CUR1 BULK COLLECT
    INTO COLS;
  CLOSE CUR1;
  col_length:=cols.last;
  V_SQL := 'declare
cur_cursor sys_refcursor;

c_rowtemp ' || TNAME || '%rowtype;
collength number:='||col_length||';
 begin
       open cur_cursor for select * from ' || TNAME ||
           ' where rownum<=10;
       loop
          fetch cur_cursor into c_rowtemp;
          exit when cur_cursor%notfound;'||FC_LAJI_01(TNAME)||'                    
         dbms_output.put_line(''  '');
       end loop;
end; ';

  EXECUTE IMMEDIATE V_SQL;
END;
---------
CALL SP_LAJI_04('EMP');
---------
CREATE OR REPLACE FUNCTION FC_LAJI_01(tname VARCHAR2) RETURN VARCHAR2
AS
 CUR1 SYS_REFCURSOR;
  TYPE COLCON IS TABLE OF USER_TAB_COLUMNS.TABLE_NAME%TYPE;
  COLS COLCON;
i NUMBER:=1;
mess VARCHAR2(3000);
BEGIN
  OPEN CUR1 FOR
    SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = TNAME;
  FETCH CUR1 BULK COLLECT
    INTO COLS;
  CLOSE CUR1;
  WHILE i<=cols.last LOOP
   -- dbms_output.put_line(i);
    mess:=mess||'dbms_output.put(c_rowtemp.' || COLS(i) || '||''   '' );';
    i:=i+1;
  END LOOP;
  RETURN mess;
END;

最终效果:

在这里插入图片描述

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值