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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
  • 2021-12-31
猜你喜欢
  • 2022-12-23
  • 2022-01-06
  • 2022-02-07
相关资源
相似解决方案