各位用户为了找寻关于oracle中print_table存储过程实例介绍的资料费劲了很多周折。这里教程网为您整理了关于oracle中print_table存储过程实例介绍的相关资料,仅供查阅,以下为您介绍关于oracle中print_table存储过程实例介绍的详细内容

定义

所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过 编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数 来调用并执行它,从而完成一个或一系列的数据库操作。

一直以来,觉得MySQL中使用G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面。但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print_table实现了类似这样的功能。只是我们这些凡夫俗子不知道而已,特意整理在此,方便自己或有需要的人以后查看。 

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 CREATE OR REPLACE PROCEDURE print_table(p_query IN VARCHAR2) AUTHID CURRENT_USER IS  l_thecursor INTEGER DEFAULT dbms_sql.open_cursor;  l_columnvalue VARCHAR2(4000);  l_status  INTEGER;  l_desctbl  dbms_sql.desc_tab;  l_colcnt  NUMBER; BEGIN  EXECUTE IMMEDIATE 'alter session set nls_date_format=''dd-mon-yyyy hh24:mi:ss'' ';    dbms_sql.parse(l_thecursor, p_query, dbms_sql.native);    dbms_sql.describe_columns (l_thecursor, l_colcnt, l_desctbl);    FOR i IN 1 .. l_colcnt LOOP   dbms_sql.define_column (l_thecursor, i, l_columnvalue, 4000);  END LOOP;    l_status := dbms_sql.EXECUTE(l_thecursor);    WHILE ( dbms_sql.Fetch_rows(l_thecursor) > 0 ) LOOP   FOR i IN 1 .. l_colcnt LOOP    dbms_sql.column_value (l_thecursor, i, l_columnvalue);      dbms_output.Put_line (RPAD(L_desctbl(i).col_name, 30)          || ': '          || l_columnvalue);   END LOOP;     dbms_output.put_line('-----------------');  END LOOP;    EXECUTE IMMEDIATE 'alter session set nls_date_format=''dd-MON-rr'' '; EXCEPTION  WHEN OTHERS THEN     EXECUTE IMMEDIATE     'alter session set nls_date_format=''dd-MON-rr'' ';       RAISE; END; /

如下测试所示:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 SQL> set serveroutput on size 99999; SQL> execute print_table('select * from v$session where sid=997'); SADDR       : 000000085FA35CA0 SID       : 997 SERIAL#      : 1 AUDSID      : 0 PADDR       : 000000085F6B7E70 USER#       : 0 USERNAME      : COMMAND      : 0 OWNERID      : 2147483644 TADDR       : LOCKWAIT      : STATUS      : ACTIVE SERVER      : DEDICATED SCHEMA#      : 0 SCHEMANAME     : SYS OSUSER      : oracle PROCESS      : 5036 MACHINE      : xxxx PORT       : 0 TERMINAL      : UNKNOWN PROGRAM      : oracle@xxxxx (DBW0) TYPE       : BACKGROUND SQL_ADDRESS     : 00 SQL_HASH_VALUE    : 0 SQL_ID      : SQL_CHILD_NUMBER    : 0 PREV_SQL_ADDR     : 00 PREV_HASH_VALUE    : 0 PREV_SQL_ID     : PREV_CHILD_NUMBER    : 0 PLSQL_ENTRY_OBJECT_ID   : PLSQL_ENTRY_SUBPROGRAM_ID  : PLSQL_OBJECT_ID    : PLSQL_SUBPROGRAM_ID   : MODULE      : MODULE_HASH     : 0 ACTION      : ACTION_HASH     : 0 CLIENT_INFO     : FIXED_TABLE_SEQUENCE   : 0 ROW_WAIT_OBJ#     : -1 ROW_WAIT_FILE#    : 0 ROW_WAIT_BLOCK#    : 0 ROW_WAIT_ROW#     : 0 LOGON_TIME     : 04-jul-2018 21:15:52 LAST_CALL_ET     : 5272838 PDML_ENABLED     : NO FAILOVER_TYPE     : NONE FAILOVER_METHOD    : NONE FAILED_OVER     : NO RESOURCE_CONSUMER_GROUP  : PDML_STATUS     : DISABLED PDDL_STATUS     : DISABLED PQ_STATUS      : DISABLED CURRENT_QUEUE_DURATION  : 0 CLIENT_IDENTIFIER    : BLOCKING_SESSION_STATUS  : NO HOLDER BLOCKING_INSTANCE    : BLOCKING_SESSION    : SEQ#       : 34697 EVENT#      : 3 EVENT       : rdbms ipc message P1TEXT      : timeout P1       : 300 P1RAW       : 000000000000012C P2TEXT      : P2       : 0 P2RAW       : 00 P3TEXT      : P3       : 0 P3RAW       : 00 WAIT_CLASS_ID     : 2723168908 WAIT_CLASS#     : 6 WAIT_CLASS     : Idle WAIT_TIME      : 0 SECONDS_IN_WAIT    : 107 STATE       : WAITING SERVICE_NAME     : SYS$BACKGROUND SQL_TRACE      : DISABLED SQL_TRACE_WAITS    : FALSE SQL_TRACE_BINDS    : FALSE ECID       : ----------------- PL/SQL procedure successfully completed. SQL>

参考资料:

https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1035431863958,%7Bprint_table%7D

总结

以上所述是小编给大家介绍的oracle中print_table存储过程介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

原文链接:https://www.cnblogs.com/kerrycode/archive/2018/09/03/9581464.html