(转)oracle 存储过程 带游标作为OUT参数输出

存储过程返回OUT参数的游标 例子。

包中带过程 要自己定义一个type [cur_name] is ref cursor游标,返回的时候就直接 procedure AAA(变量名 out [cur_name])如此申明OUT变量

存储过程 用系统默认的 sys_refcursor 游标类型 定义变量就OK了

--=====================================================

Sql代码 :

--PL/SQL Code (包中带过程) 过程带游标的OUT参数,返回游标(ref cursor)
            
            create or replace package my_pack as
             type my_ref_cursor is ref cursor;
             procedure getMyCursor(val out my_ref_cursor);
            end my_pack;
            
            create or replace package body my_pack as
             procedure getMyCursor(val out my_ref_cursor)
             is
             begin
              open val for select * from student;
             end;
            end my_pack;
   --=====================================================

Sql代码 :
            --PL/SQL Code(存储过程) 带游标的OUT参数,返回游标(ref cursor)
            
            create or replace procedure retCursor(ret_cursor out sys_refcursor)is
            ret_cursor_value  sys_refcursor;
            begin
            open ret_cursor_value for select * from student;
             ret_cursor:=ret_cursor_value;
            end retCursor;

--=====================================================

下面是个每个学生求平均值的存储过程。遇到的问题是带参数游标中的变量名字不要和表中的一样,否则会出问题

create or replace procedure prc_student_avg_score
as

cursor c_sno is select s.sno , s.name from STUDENT s; --查询学生表的ID
cursor sc_avg(s_no varchar2) is select avg(sc.degree) from SCORE sc where sc.sno=s_no; --通过学生ID查询平均成绩

s_sno_j student.sno%type;   --变量ID
sc_avg_i score.degree%type; --变量平均成绩
sname   student.name%type;  
 
begin
 open c_sno;--打开查询ID的游标
 loop
   fetch c_sno into s_sno_j ,sname ;
   --DBMS_OUTPUT.PUT_LINE( '    c_sno当前扫描行:' || c_sno%rowcount );
   exit when c_sno%notfound;
     open sc_avg(s_sno_j); --打开查询平均成绩的游标,参数为学生ID
     loop
       fetch sc_avg into sc_avg_i;
       if  sc_avg_i is null or sc_avg_i=0  then
          sc_avg_i:=0 ;
       end if;
 
       exit when sc_avg%notfound;
       DBMS_OUTPUT.PUT_LINE(  sname || ':' ||sc_avg_i);
 
     end loop;
     close sc_avg;
 end loop;
 close c_sno;
end prc_student_avg_score;

(转)oracle 存储过程 带游标作为OUT参数输出的更多相关文章

  1. oracle存储过程和游标的使用

    oracle存储过程和游标的使用 (2011-04-19 14:52:47) 转载▼ 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情 ...

  2. MySQL存储过程带in和out参数

    MySQL存储过程带in和out参数 最简单的例子: [html] mysql> DELIMITER $$ mysql> USE test $$ Database changed mysq ...

  3. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  4. oracle存储过程(带参数的存储过程)

    带参数的存储过程 举例:为指定的员工涨100元的工资,打印涨前和涨后的工资 如果带参,需要指定是输入参数还是输出参数 create or replace procedure raisesalary(e ...

  5. Oracle存储过程、游标、函数

    SQL99是什么 (1)是操作所有关系型数据库的规则 (2)是第四代语言 (3)是一种结构化查询语言 (4)只需发出合法合理的命令,就有对应的结果显示 SQL的特点 (1)交互性强,非过程化 (2)数 ...

  6. myBatIs.Net 调用Oracle 存储过程返回游标

    找了好久,网上也没示例,全是java的,没办法,后来看到一个网上别人写的例子. http://www.myfirm.cn/blog/article/Control/13.html 上面照套还是出错,我 ...

  7. Oracle存储过程返回游标实例详解

    复制代码 代码如下:CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHAR ...

  8. Oracle存储过程 使用游标、数组的配合查询

    查询输入的门牌号码是否在标准门牌库中存在.存在则返回相应的号码. public string GetValidate(){ OracleConnection conn = ConnectOra(); ...

  9. oracle存储过程和游标参考

    oracle open cursor forhttp://www.itpub.net/thread-1874683-1-1.html

随机推荐

  1. spring IOC 容器中 Bean 的生命周期

    IOC 容器中 Bean 的生命周期: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.调用 Bean 后置处理器接口(BeanPostPr ...

  2. 《C#编程》课件 - C#基础

    声明多维数组• 创建一个多维数组int[,] intMatrix;float[,] floatMatrix;string[,,] strCube;使用new关键字• 必须指定每个维度的大小int[,] ...

  3. linux下tftp使用(转一些命令)

    转载于:http://cache.baiducontent.com/c?m=9d78d513d99d1af31fa7837e7c5083205b4380122ba6d1020ba5843990732c ...

  4. C++高精度计算代码运行时间(转载)

    转载:http://blog.csdn.net/rrrfff/article/details/6583410 //在定时前应该先调用QueryPerformanceFrequency()函数获得机器内 ...

  5. Log4Net 配置SQL2008数据库 并传入自定义业务对象

    最近根据业务需要,俺们老大要求我们了解一个c#的组件——Log4Net 这玩意儿从来没弄过,感觉挺深奥的,结果经过2天的研究,还算小有所成吧,基本思路已经清晰明了了,不过过程中遇到一些很奇葩的问题,和 ...

  6. mysql多表查询例子

    [理解方式]先分别找出每个表中查询出来的结果,然后再将两个结果合并. create database test charset utf8 collate utf8_bin;use test;creat ...

  7. 任意阶幻方(魔方矩阵)C语言实现

    魔方又称幻方.纵横图.九宫图,最早记录于我国古代的洛书.据说夏禹治水时,河南洛阳附近的大河里浮出了一只乌龟,背上有一个很奇怪的图形,古人认为是一种祥瑞,预示着洪水将被夏禹王彻底制服.后人称之为&quo ...

  8. python_way ,day26 django_admin 自定义

    1.想在admin中增加新的字段如图: 默认django只显示 def __str__(self)里面的return的值 from django.contrib import admin # Regi ...

  9. 《BI那点儿事》数据流转换——排序

    排序转换允许对数据流中的数据按照某一列进行排序.这是五个常用的转换之一.连接数据源打开编辑界面,编辑这种任务.不想设置为排序列的字段不要选中,默认情况下所有列都会选中.如图所示,按照TotalSuga ...

  10. HTML基础(2)

    常见标签 1.img标签 <img src="图片地址" alt="图片名"/>  图片(单标签) alt属性 是图片名字,是给百度搜索引擎抓取使用 ...