oracle中print_table存储过程实例介绍-创新互联

定义

成都创新互联公司从2013年成立,先为汇川等服务建站,汇川等地企业,进行企业商务咨询服务。为汇川企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

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

一直以来,觉得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 hh34: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; 
/

网站栏目:oracle中print_table存储过程实例介绍-创新互联
分享链接:http://ybzwz.com/article/hissc.html