zoukankan      html  css  js  c++  java
  • oracle中print_table存储过程实例介绍

    oracle中pro_print_table存储过程实例介绍

    存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。这篇文章主要介绍了oracle中print_table存储过程介绍,需要的朋友可以参考下

    定义

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

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

    create or replace
    PROCEDURE pro_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 pro_print_table('select * from v$session where sid=540');
    SADDR : 00000002FB63D5D0
    SID : 540
    SERIAL# : 57010
    AUDSID : 26611743
    PADDR : 00000002FE44E050
    USER# : 186
    USERNAME : TEAMB0
    COMMAND : 3
    OWNERID : 2147483644
    TADDR :
    LOCKWAIT :
    STATUS : ACTIVE
    SERVER : DEDICATED
    SCHEMA# : 186
    SCHEMANAME : TEAMB0
    OSUSER : ASC099512
    PROCESS : 14596:10816
    MACHINE : YYII_ASCPH4-3000006098
    PORT : 56979
    TERMINAL : PH4-3000006098
    PROGRAM : sqlplus.exe
    TYPE : USER
    SQL_ADDRESS : 00000002FD46DD90
    SQL_HASH_VALUE : 3200604717
    SQL_ID : 5k79fgyzcaqjd
    SQL_CHILD_NUMBER : 1
    PREV_SQL_ADDR : 00000001E9827E70
    PREV_HASH_VALUE : 763684067
    PREV_SQL_ID : 9jvrjm0qs9t73
    PREV_CHILD_NUMBER : 0
    PLSQL_ENTRY_OBJECT_ID : 485728
    PLSQL_ENTRY_SUBPROGRAM_ID : 1
    PLSQL_OBJECT_ID :
    PLSQL_SUBPROGRAM_ID :
    MODULE : SQL*Plus
    MODULE_HASH : 3669949024
    ACTION :
    ACTION_HASH : 0
    CLIENT_INFO : 172.17.45.44
    FIXED_TABLE_SEQUENCE : 1581100286
    ROW_WAIT_OBJ# : 355
    ROW_WAIT_FILE# : 1
    ROW_WAIT_BLOCK# : 2786
    ROW_WAIT_ROW# : 0
    LOGON_TIME : 11-10月-2018 16:42:01
    LAST_CALL_ET : 0
    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# : 85
    EVENT# : 263
    EVENT : SQL*Net message from client
    P1TEXT : driver id
    P1 : 1413697536
    P1RAW : 0000000054435000
    P2TEXT : #bytes
    P2 : 1
    P2RAW : 0000000000000001
    P3TEXT :
    P3 : 0
    P3RAW : 00
    WAIT_CLASS_ID : 2723168908
    WAIT_CLASS# : 6
    WAIT_CLASS : Idle
    WAIT_TIME : 6956
    SECONDS_IN_WAIT : 73
    STATE : WAITED KNOWN TIME
    SERVICE_NAME : SYS$USERS
    SQL_TRACE : DISABLED
    SQL_TRACE_WAITS : FALSE
    SQL_TRACE_BINDS : FALSE
    ECID :
    -----------------

    PL/SQL 过程已成功完成。

  • 相关阅读:
    《Java技术》第四次作业
    Java第三次作业——面向对象基础(封装)
    《Java技术》第二次作业
    #《Java技术》第一次作业
    Java第十次作业
    Java第九次作业
    Java第八次作业
    Java第七次作业
    Java第6次作业
    Java第五次作业
  • 原文地址:https://www.cnblogs.com/scwbky/p/9773553.html
Copyright © 2011-2022 走看看