Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140912
  • 博文数量: 161
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -30
  • 用 户 组: 普通用户
  • 注册时间: 2017-09-21 21:45
文章分类
文章存档

2009年(1)

2008年(74)

2007年(48)

2006年(38)

我的朋友

分类: Oracle

2007-06-27 21:41:35

HOWTO--在procedure返回結果集
在很多時候我們需要通過bind var來提高整個DB的performance,在我們用第三次開發軟件做對結果集的查詢。我們如何在procedure中完成對結果集的查詢呢,從oracle7.3才被支持,在9i以后又有新的變化,在9i以前要define一個type才可以。而在9i以后oracle引入了一個新的類型為sys_refcursor,這樣就不需要我們重新定義。我們來看一個例子吧。

C:oracleora92sqlplusdemo>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 星期六 4月 2 11:09:06 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

SQL> conn
已連線.
SQL> create or replace procedure getEmpByDept(in_deptNo  in emp.deptno%type,
  2                                           out_curEmp out SYS_REFCURSOR) as
  3
  4  begin
  5    open out_curEmp for
  6      SELECT * FROM emp WHERE deptno = in_deptNo ;
  7  EXCEPTION
  8    WHEN OTHERS THEN
  9      RAISE_APPLICATION_ERROR(-20101,
 10                              'Error in getEmpByDept' || SQLCODE );
 12  end getEmpByDept;
 13  /

已建立程序.

SQL> var rset refcursor;
SQL> exec getEmpByDept(10,:rset);

PL/SQL 程序順利完成.

SQL> print rset;

     EMPNO ENAME                JOB                       MGR HIREDATE      SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ---------- ---------- ---------- ----------
      7934 MILLER               CLERK                    7782 23-1月 -82      1300                    10
      7782 CLARK                MANAGER                  7839 09-1月 -81      2450                    10
      7839 KING                 PRESIDENT                     17-11月-81      5000                    10

SQL>

阅读(1034) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~