一个扩展存储过程调用另一个存储过程,示例:

被调用存储过程:最后会返回一个游标,游标返回一个值。调用这个存储过程的存储过程同样需要获取它。

 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 存储过程调用返回游标的另一个存储过程。的更多相关文章

  1. [转]SQLSERVER存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器

    本文转自:http://blog.csdn.net/nnaabbcc/article/details/7967761 存储过程调用不同数据库的数据 在存储过程调用不同数据库的数据该如何做,比如在存储过 ...

  2. ibatis.net调用oracle存储过返回游标SYS_REFCURSOR结果集

    最近在用ibatis.net框架和oracle 11g开发一套程序.其中有一个需求就是通过存储过程,查询指定条件的数据集. 但是在开发的过程中遇到了问题,问题如下: 1.如何通过ibatis.net执 ...

  3. Matlab调用返回游标的存储过程的分析和处理

    2.Matlab调用Oracl带游标参数输出的存储过程 笔者也是将工作之中遇到的问题进行了搜集与整理,才完成该文的编写,希望能帮助到有需要的朋友. 2.1.PLSQL中的存储过程 PROCEDURE ...

  4. 【存储过程】用SQL语句获得一个存储过程返回的表

    定义一个存储过程如下: create proc [dbo].[test1] @id int as select 1 as id,'abc' as name union all select @id a ...

  5. 利用SQLServer查询分析器获取存储过程的返回值,检查测试存储过程

    1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况(1)如果通过查询分析器 ...

  6. Oracle 11g 环境,使用utl_smtp创建一个存储过程来发送邮件

    太多的在线电子邮件存储过程.我不转发,弄个作为一个简单的例子演示. create or replace procedure Send_mail(mail_body varchar2) is smtp_ ...

  7. ado.net调用返回多结果集的存储过程

  8. SQL 存储过程里调用另一个存储过程

    由于创建了一个存储过程,并且要在另一个存储过程里调用这个存储过程所以在网上找了一下相关的代码,现在总结一下,防止以后还会用到 由于这次我写的存储过程只需要返回一个求和的结果,所以我使用了output ...

  9. 关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值

    关于ExecuteNonQuery执行存储过程的返回值 用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过. if(cmd.ExecuteNonQuery("xxx ...

随机推荐

  1. .NET Core Runtime ARM32 builds now available

    原文地址:传送门 .NET Core Runtime ARM32 builds now available The .NET Core team is now producing ARM32 buil ...

  2. php关键字

    \b( (a(bstract|nd|rray|s))| (c(a(llable|se|tch)|l(ass|one)|on(st|tinue)))| (d(e(clare|fault)|ie|o))| ...

  3. (4)python 字典

    创建字典 phonebook = {'} 以 value :key  键值对的格式.冒号前是键,冒号后时值 ,组合在一起是一项.多个项放在一个花括号内. 函数dict()用来把其他项创建成一个字段 & ...

  4. HDU 6216 A Cubic number and A Cubic Number【数学思维+枚举/二分】

    Problem Description A cubic number is the result of using a whole number in a multiplication three t ...

  5. HDU 多校1.11

  6. Apache用户目录枚举工具apache-users

     Apache用户目录枚举工具apache-users Apache服务器提供UserDir模块,允许在网站为不同的用户设置对应的目录.这样,用户可以使用http://example.com/~use ...

  7. POJ 3246 Game(凸包)

    [题目链接] http://poj.org/problem?id=3246 [题目大意] 给出一些点,请删去一个点,使得包围这些点用的线长最短 [题解] 去掉的点肯定是凸包上的点,所以枚举凸包上的点去 ...

  8. [BZOJ1095]捉迷藏

    点了动态点分治的科技树,这道题是树形态不变的动态点分治,形态变化的话...待会补 考虑点分治过程中的这样一种结构:按递归层次把当前层的重心与上层重心互相连接,这就是点分治树,容易看出它的树高只有$O( ...

  9. [BZOJ4530]大融合

    LCT维护子树信息 维护两个子树信息,$vinf_x$表示节点$x$的所有轻儿子子树信息,$inf_x$表示以$x$为根的LCT子树(包含虚边)的信息 对$vinf$: access时,断开$x$的原 ...

  10. 【动态规划】UVALive - 4888 - Railroad

    f(i,j)表示从A序列前面取i个,从B序列前面取j个时,能否拼成C序列.转移自行脑补. A train yard is a complex series of railroad tracks for ...