當前位置:
首頁 > 知識 > oracle 中 print_table 存儲過程介紹

oracle 中 print_table 存儲過程介紹

(點擊

上方公眾號

,可快速關注)




來源:瀟湘隱者 ,


www.cnblogs.com/kerrycode/p/9581464.html




一直以來,覺得MySQL中使用G參數改變輸出結果集的顯示方式非常好用,尤其是在命令行界面。但是ORACLE資料庫沒有這個功能,今天在搜索到Tom大師的一篇博文時,發現大師用一個存儲過程print_table實現了類似這樣的功能。只是我們這些凡夫俗子不知道而已,特意整理在此,方便自己或有需要的人以後查看。





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; 


/




如下測試所示:





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




【關於投稿】




如果大家有原創好文投稿,請直接給公號發送留言。




① 留言格式:


【投稿】+《 文章標題》+ 文章鏈接

② 示例:


【投稿】《不要自稱是程序員,我十多年的 IT 職場總結》:http://blog.jobbole.com/94148/

③ 最後請附上您的個人簡介哈~






看完本文有收穫?請轉發分享給更多人


關注「ImportNew」,提升Java技能


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ImportNew 的精彩文章:

深入理解單例模式 ( 下 )
誤刪除 dev 下特殊文件怎麼辦

TAG:ImportNew |