zoukankan      html  css  js  c++  java
  • Oracle Procedure 用ref cursor来返回记录集

    用在存储过程中:
    --在Spec中定义
    TYPE type_refcursor IS REF CURSOR;

    --在Body中写Procedure
    PROCEDURE check_form_field (p_table_name IN VARCHAR2, o_curs OUT type_refcursor)
    IS
    BEGIN
       
    IF p_table_name IS NULL
       
    THEN
          
    OPEN o_curs FOR '
    SELECT 
    ''NO_TABLE'' AS field_name, ''NO_TABLE'' AS field_type,
           
    ''0'' AS field_length
      FROM DUAL
    ';
       
    END IF;
    EXCEPTION
       
    WHEN OTHERS
       
    THEN
          RAISE;
    END check_form_field;

    测试:
    DECLARE
       TYPE cursor_type_1 
    IS REF CURSOR;

       v_curs         cursor_type_1;
       l_rec_num      
    NUMBER;
       field_name     
    VARCHAR2 (100);
       field_type     
    VARCHAR2 (100);
       field_length   
    NUMBER;
    BEGIN
       l_rec_num :
    = 0;
       form_define_advance.check_form_field (p_table_name      
    => 'BQEFORM7',
                                             o_curs            
    => v_curs
                                            );

       LOOP
          
    FETCH v_curs
           
    INTO field_name, field_type, field_length;

          
    EXIT WHEN v_curs%NOTFOUND;
          l_rec_num :
    = l_rec_num + 1;
          DBMS_OUTPUT.put_line (l_rec_num);
          DBMS_OUTPUT.put_line (field_name);
          DBMS_OUTPUT.put_line (field_type);
          DBMS_OUTPUT.put_line (field_length);
       
    END LOOP;

       
    IF v_curs%ISOPEN
       
    THEN
          
    CLOSE v_curs;
       
    END IF;
    EXCEPTION
       
    WHEN OTHERS
       
    THEN
          DBMS_OUTPUT.put_line (SUBSTR (   
    'Error '
                                        
    || TO_CHAR (SQLCODE)
                                        
    || ''
                                        
    || SQLERRM,
                                        
    1,
                                        
    255
                                       )
                               );
          RAISE;
    END;
  • 相关阅读:
    Windows Server 2008 R2域控组策略设置禁用USB
    Windows Server 2008 R2组策略设置计算机配置和用户配置
    Windows Server 2008 R2父域管理员与子域管理员相互登录访问
    转载:如何处理浏览器的断网情况?
    转载:浏览器缓存库设计总结(localStorage/indexedDB)
    手写启动一个本地服务器的命令行工具
    Node.js-核心模块-zlib
    使用console.log打印公司招聘信息和字符画
    转载:准备刷 leetcode 了,才发现自己连时间复杂度都不懂
    转载:前端通信那些事儿
  • 原文地址:https://www.cnblogs.com/songsh96/p/1051245.html
Copyright © 2011-2022 走看看