zoukankan      html  css  js  c++  java
  • Oracle ref cursor 参考

    包括强类型、若类型、传递 ref cursor 参数等。

    Oracle Ref Cursors
    Version 10.2
     
    Strongly Typed
    Note: A REF CURSOR that specifies a specific return type.
    Package Header CREATE OR REPLACE PACKAGE strongly_typed IS

    TYPE return_cur IS REF CURSOR RETURN all_tables%ROWTYPE;
    PROCEDURE child(p_return_rec OUT return_cur);
    PROCEDURE parent(p_NumRecs PLS_INTEGER);

    END strongly_typed;
    /
    Package Body CREATE OR REPLACE PACKAGE BODY strongly_typed IS
    PROCEDURE child(p_return_rec OUT return_cur) IS

    BEGIN
    OPEN p_return_rec FOR
    SELECT * FROM all_tables;
    END child;
    --==================================================
    PROCEDURE parent (p_NumRecs PLS_INTEGER) IS
    p_retcur return_cur;
    at_rec all_tables%ROWTYPE;
    BEGIN
    child(p_retcur);

    FOR i IN 1 .. p_NumRecs
    LOOP
    FETCH p_retcur
    INTO at_rec;

    dbms_output.put_line(at_rec.table_name ||
    ' - ' || at_rec.tablespace_name ||
    ' - ' || TO_CHAR(at_rec.initial_extent) ||
    ' - ' || TO_CHAR(at_rec.next_extent));
    END LOOP;
    END parent;
     
    END strongly_typed;
    /
    To Run The Demo set serveroutput on

    exec strongly_typed.parent(1)
    exec strongly_typed.parent(8)
     
    Weakly Typed
    Note: A REF CURSOR that does not specify the return type such as SYS_REFCURSOR.
    Child Procedure CREATE OR REPLACE PROCEDURE child (
    p_NumRecs IN PLS_INTEGER,
    p_return_cur OUT SYS_REFCURSOR)
    IS

    BEGIN
    OPEN p_return_cur FOR
    'SELECT * FROM all_tables WHERE rownum <= ' || p_NumRecs ;
    END child;
    /
    Parent Procedure CREATE OR REPLACE PROCEDURE parent (pNumRecs VARCHAR2) IS
    p_retcur SYS_REFCURSOR;
    at_rec all_tables%ROWTYPE;
    BEGIN
    child(pNumRecs, p_retcur);

    FOR i IN 1 .. pNumRecs
    LOOP

    FETCH p_retcur
    INTO at_rec;

    dbms_output.put_line(at_rec.table_name ||
    ' - ' || at_rec.tablespace_name ||
    ' - ' || TO_CHAR(at_rec.initial_extent) ||
    ' - ' || TO_CHAR(at_rec.next_extent));
    END LOOP;
    END parent;
    /
    To Run The Demo set serveroutput on

    exec parent(1)
    exec parent(17)
     
    Passing Ref Cursors
    Ref Cursor Passing Demo CREATE TABLE employees (
    empid NUMBER(5),
    empname VARCHAR2(30));

    INSERT INTO employees (empid, empname) VALUES (1, 'Dan Morgan');
    INSERT INTO employees (empid, empname) VALUES (2, 'Jack Cline');
    INSERT INTO employees (empid, empname) VALUES (3, 'Caleb Small');
    COMMIT;
    CREATE OR REPLACE PROCEDURE pass_ref_cur(p_cursor SYS_REFCURSOR) IS

    TYPE array_t IS TABLE OF VARCHAR2(4000)
    INDEX BY BINARY_INTEGER;

    rec_array array_t;

    BEGIN
    FETCH p_cursor BULK COLLECT INTO rec_array;

    FOR i IN rec_array.FIRST .. rec_array.LAST
    LOOP
    dbms_output.put_line(rec_array(i));
    END LOOP;
    END pass_ref_cur;
    /

    set serveroutput on

    DECLARE
    rec_array SYS_REFCURSOR;
    BEGIN
    OPEN rec_array FOR
    'SELECT empname FROM employees';

    pass_ref_cur(rec_array);
    CLOSE rec_array;
    END;
    /

  • 相关阅读:
    妙用Telnet快速收发电子邮件(转载)
    windows server 2003如何安装IIS,配置IIS,让iis支持aspx(收集)
    T7400等DELL工作站及服务器的Windows server 2003系统安装——解决“找不到安装在计算机上的硬盘驱动器 安装无法继续,要退出请按F3”问题
    PostgresSQL连接认证设置(收集)
    安装PostgreSQL :Problem running postinstall (收集)
    UltiDev Cassini Web Server介绍
    配置Lumisoft Mail Server给外网邮箱发消息
    mysql命令行常用命令(收集)
    SQL复制数据表及表结构
    解决lumisoft mail server使用中的错误“550 5.7.1 Unable to relay for xxx”
  • 原文地址:https://www.cnblogs.com/wbzhao/p/2421136.html
Copyright © 2011-2022 走看看