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

  • 相关阅读:
    Django 登录页面重定向
    python 调试命令
    错误
    错误
    图算法之图的创建
    Git 常用命令详解(三)
    Git 常用命令详解(二)
    如何提问
    项目常用jquery/easyui函数小结
    我是怎么发现并解决项目页面渲染效率问题的(IE调试工具探查器的使用)
  • 原文地址:https://www.cnblogs.com/wbzhao/p/2421136.html
Copyright © 2011-2022 走看看