Oracle 存储过程调用返回游标的另一个存储过程。
一个扩展存储过程调用另一个存储过程,示例:
被调用存储过程:最后会返回一个游标,游标返回一个值。调用这个存储过程的存储过程同样需要获取它。
procedure SearchBill --根据到货单号查询所有行号
(
P_code VARCHAR,
P_UserCode varchar ,
P_org varchar,
P_warehouse varchar,
p_movetype varchar,
p_billtype varchar,
p_note varchar,
p_isred varchar2,
p_exmovetype varchar2,
p_ReCursor0 out T_CURSOR
)
IS
v_count int;
begin -------------------------------代码-------------------------- open p_ReCursor0 for SELECT v_count num FROM dual; end SearchBill ;
在这个处理中,返回的结果是一个数字的游标。只有一行数据。
因此我接收的时候,用一个int变量接收他。
同时调用存储过程时候,需要定义一个游标变量用来传进去,返回的结果通过这个游标取的。
CREATE OR REPLACE PACKAGE BODY ERP_IMIM_Grreqbill IS procedure SearchBillEx
(
P_code VARCHAR,
P_UserCode varchar ,
P_org varchar,
P_warehouse varchar,
p_movetype varchar,
p_billtype varchar,
p_note varchar,
p_isred varchar2,
p_exmovetype varchar2,
p_ReCursor0 out T_CURSOR
) IS
p_ReCursor1 T_Cursor;
num int; begin SearchBill(P_code,P_UserCode,P_org,P_warehouse,p_movetype,p_billtype,p_note,p_isred,p_exmovetype,p_ReCursor1); FETCH p_ReCursor1 INTO num; //把游标获取的数据赋值给int类型变量。注意,对于有多行数据返回的游标,需要循环遍历游标,不能这样。 open p_ReCursor0 for select num num from dual;//把这个结果同样返回出去。 end SearchBillEx;
另外对于接收的结果含有多行数据,各个字段不知道类型,但是有一个对应的表查询的SQL的游标,行的字段对应类型可以统一用一个变量定义。
先设置一个字段相对应的游标,然后通过%rowtype设置类型。
例子:
-- 包头定义返回游标类型
TYPE T_Cursor IS REF CURSOR;
-- 包体存储过程里声明
Declare
p_ReCursor1 T_Cursor; --通过这种方式可以设置游标返回结果集各个字段的变量,类型。下面的p_ReRow1就可以直接通过p_ReRow1.字段名方式获取返回游标对应值。
cursor Temp_Cursor1 is SELECT BatchID,BatchCode,DisabledDate,CAST(0 AS DECIMAL(20,8)) as Quantity FROM Batches WHERE 1=2; p_ReRow1 Temp_Cursor1%rowtype; -- 存储过内部调用其他存储过程并获取返回结果
ERP_IMBillInterFace.BatchHelpIss(p_CompanyID,p_OrgID,p_WarehouseID,row_cursor2.ChaintBatch,'','','','',p_MaterialID,'','','','Z','',
p_BatchNumCode,'','','','','',p_CurDate,'','','','',p_IsLMGR,'',p_MoveTypeID,(Case p_IsRed When '' Then '' Else '' End),
row_cursor2.BCF1,row_cursor2.BCF2,row_cursor2.BCF3,row_cursor2.BCF4,row_cursor2.BCF5,row_cursor2.BCF6,row_cursor2.BCF7,row_cursor2.BCF8,
row_cursor2.BCF9,row_cursor2.BCF11,row_cursor2.BCF12,row_cursor2.BCF13,row_cursor2.BCF14,row_cursor2.BCF16,row_cursor2.BCF20,
p_ReCursor1);
Loop fetch p_ReCursor1 into p_ReRow1;
exit when p_ReCursor1%notfound; insert into Temp_SaveData_TB(BatchID,BatchCode,DisabledDate,Quantity)
values (p_ReRow1.BatchID,p_ReRow1.BatchCode,p_ReRow1.DisabledDate,p_ReRow1.Quantity); End Loop;
Oracle 存储过程调用返回游标的另一个存储过程。的更多相关文章
- [转]SQLSERVER存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器
本文转自:http://blog.csdn.net/nnaabbcc/article/details/7967761 存储过程调用不同数据库的数据 在存储过程调用不同数据库的数据该如何做,比如在存储过 ...
- ibatis.net调用oracle存储过返回游标SYS_REFCURSOR结果集
最近在用ibatis.net框架和oracle 11g开发一套程序.其中有一个需求就是通过存储过程,查询指定条件的数据集. 但是在开发的过程中遇到了问题,问题如下: 1.如何通过ibatis.net执 ...
- Matlab调用返回游标的存储过程的分析和处理
2.Matlab调用Oracl带游标参数输出的存储过程 笔者也是将工作之中遇到的问题进行了搜集与整理,才完成该文的编写,希望能帮助到有需要的朋友. 2.1.PLSQL中的存储过程 PROCEDURE ...
- 【存储过程】用SQL语句获得一个存储过程返回的表
定义一个存储过程如下: create proc [dbo].[test1] @id int as select 1 as id,'abc' as name union all select @id a ...
- 利用SQLServer查询分析器获取存储过程的返回值,检查测试存储过程
1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况(1)如果通过查询分析器 ...
- Oracle 11g 环境,使用utl_smtp创建一个存储过程来发送邮件
太多的在线电子邮件存储过程.我不转发,弄个作为一个简单的例子演示. create or replace procedure Send_mail(mail_body varchar2) is smtp_ ...
- ado.net调用返回多结果集的存储过程
- SQL 存储过程里调用另一个存储过程
由于创建了一个存储过程,并且要在另一个存储过程里调用这个存储过程所以在网上找了一下相关的代码,现在总结一下,防止以后还会用到 由于这次我写的存储过程只需要返回一个求和的结果,所以我使用了output ...
- 关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值
关于ExecuteNonQuery执行存储过程的返回值 用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过. if(cmd.ExecuteNonQuery("xxx ...
随机推荐
- 正则表达式筛选出jpg、png的图片url
有些字符串也不是富文本,也不是带标准标签的图片地址和文字.想筛选出所有图片或地址怎么办呢.话不多说直接上带码. private static void reg() { // TODO Auto-gen ...
- 安卓长按交互onCreateContextMenu的简单 用法
1.可在activity和fragment中使用. 2.使用方法 (1)注册 registerForContextMenu(btn);//btn是要实现交互的控件 (2)重写onCreateConte ...
- NetTcpBinding 类nettcpbinding的属性和方法
一种适合于跨计算机通信的安全可靠的绑定. 继承层次结构 System.Object System.ServiceModel.Channels.Binding System.Servi ...
- 2018 ACM-ICPC 南京网络赛
Problem A Problem B Problem C Problem D Problem E Problem F Problem G Problem H Problem I Problem J ...
- zoj3988
zoj3988 题意 如果一个集合 \(\{i,j\}\) 满足 \(i\neq j\) 且 \(a[i]+a[j]\) 是素数,则称之为素数集合. 给出一些数字,这些数字可以组成多种素数集合,从这些 ...
- centos7下扩充swap空间
命令:swapon -s #查看系统的swap配置命令 创建步骤: 1. 决定SWAP文件的大小,先指定区块大小:bs,再指定区块数量count,则SWAP文件的大小是:count*bs 在root用 ...
- Educational Codeforces Round 10 E - Pursuit For Artifacts (强联通缩点 + 回溯)
题目链接:http://codeforces.com/contest/652/problem/E 给你n个点m个边,x和y双向连接,要是z是1表示这条边上有宝藏,0则没有,最后给你起点和终点,问你要是 ...
- Linux下 编译C++/C以及常用的几种命令(ubuntu)
http://blog.csdn.net/bob1993_dev/article/details/45973919
- Android开机过程
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha Android开机过程 BootLoder引导,然后加载Linux内核. 0号进程ini ...
- 【莫比乌斯反演】BZOJ2920-YY的GCD
[题目大意] 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对. [思路] 太神了这道题……蒟蒻只能放放题解:戳,明早再过来看看 ...