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;
    /

  • 相关阅读:
    LSMW TIPS
    Schedule agreement and Delfor
    Running VL10 in the background 13 Oct
    analyse idoc by creation date
    New Journey Prepare
    EDI error
    CBSN NEWS
    Listen and Write 18th Feb 2019
    Microsoft iSCSI Software Target 快照管理
    通过 Microsoft iSCSI Software Target 提供存储服务
  • 原文地址:https://www.cnblogs.com/wbzhao/p/2421136.html
Copyright © 2011-2022 走看看