暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PRINT_TABLE 列以行形式显示

田灬禾 2024-07-27
126

在sqlplus,如果列比较多,往往会显示不够清晰,这时如果能把查询语句行转列就明了多了,在网上看到print_table存储过程:里面所设置的日期格式,可根据自己习惯修改

复制代码
 1 CREATE OR REPLACE PROCEDURE PRINT_TABLE(P_QUERY IN VARCHAR2) AUTHID CURRENT_USER IS
 2   L_THECURSOR INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;
 3   L_COLUMNVALUE VARCHAR2(4000);
 4   L_STATUS INTEGER;
 5   L_DESCTBL DBMS_SQL.DESC_TAB;
 6   L_COLCNT NUMBER;
 7 BEGIN
 8   EXECUTE IMMEDIATE 'alter session set nls_date_format=''dd-mon-yyyy hh24:mi:ss'' ';
 9   DBMS_SQL.PARSE(L_THECURSOR, P_QUERY, DBMS_SQL.NATIVE);
10   DBMS_SQL.DESCRIBE_COLUMNS(L_THECURSOR, L_COLCNT, L_DESCTBL);
11   FOR I IN 1 .. L_COLCNT LOOP
12     DBMS_SQL.DEFINE_COLUMN(L_THECURSOR, I, L_COLUMNVALUE, 4000);
13   END LOOP;
14   L_STATUS := DBMS_SQL.EXECUTE(L_THECURSOR);
15 
16   WHILE (DBMS_SQL.FETCH_ROWS(L_THECURSOR) > 0) LOOP
17     FOR I IN 1 .. L_COLCNT LOOP
18       DBMS_SQL.COLUMN_VALUE(L_THECURSOR, I, L_COLUMNVALUE);
19       DBMS_OUTPUT.PUT_LINE(RPAD(L_DESCTBL(I).COL_NAME, 30) || ': ' ||L_COLUMNVALUE);
21     END LOOP;
22     DBMS_OUTPUT.PUT_LINE('-------------------------------------');
23   END LOOP;
24   EXECUTE IMMEDIATE 'alter session set nls_date_format=''dd-MON-rr'' ';
25   EXCEPTION
26     WHEN OTHERS THEN
27       EXECUTE IMMEDIATE 'alter session set nls_date_format=''dd-MON-rr'' ';
28     RAISE;
29 END;
复制代码

存储过程编译后,在sqlplus里 可以通过 show error查看是否有编译错误,或查询USER_ERRORS视图

注意这里声明Authid Current_User后则就是调用者权限,以调用者身份执行;

在sqlplus 显示的效果:

复制代码
13:11:41 SYS@XXX> exec print_table('SELECT * FROM user_objects where rownum=1');

-------------------------------------
OBJECT_NAME                   : /1000e8d1_LinkedHashMapValueIt
SUBOBJECT_NAME                :
OBJECT_ID                     : 31050
DATA_OBJECT_ID                :
OBJECT_TYPE                   : JAVA CLASS
CREATED                       : 07-7月 -2010 12:54:47
LAST_DDL_TIME                 : 07-7月 -2010 12:54:47
TIMESTAMP                     : 2010-07-07:12:54:47
STATUS                        : VALID
TEMPORARY                     : N
GENERATED                     : N
SECONDARY                     : N
-------------------------------------

PL/SQL 过程已成功完成。
复制代码

在pl/sql可如下调用:

BEGIN
    DBMS_OUTPUT.ENABLE(BUFFER_SIZE => NULL); --这里设置output时,大小不受限制
    EA_IPMP.PRINT_TABLE('SELECT * FROM user_objects where rownum=1');
END;

如有错误,欢迎交流学习.

分类: pl/sql
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论