前端之家收集整理的这篇文章主要介绍了
oracle中print_table存储过程实例介绍,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
定义
所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的sql语句集,该sql语句集经过
编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数
来调用并执行它,从而完成一个或一系列的数据库操作。
一直以来,觉得MysqL中使用\G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面。但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print_table实现了类似这样的功能。只是我们这些凡夫俗子不知道而已,特意整理在此,方便自己或有需要的人以后查看。
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 .. lcolcnt LOOP
dbmssql.column_value (l_thecursor,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;
/
如下测试所示:
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
PL
sql_ENTRY_OBJECT_ID :
PL
sql_ENTRY_SUBPROGRAM_ID :
PL
sql_OBJECT_ID :
PL
sql_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>
参考资料:
nofollow" href="https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1035431863958,%7Bprint_table%7D">https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1035431863958,%7Bprint_table%7D
总结
以上所述是小编给大家介绍的oracle中print_table存储过程介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程之家网站的支持!