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 ...
随机推荐
- XAMPP配置vhosts多站点/绝对正确
XAMPP有时候你需要一些顶级域名访问方式来访问你本地的项目也就是虚拟主机配置,这时候就需要配置虚拟主机,给你的目录绑定一个域名,实现多域名绑定访问. 在Mac 下一直使用 MAMP 搭建本地 php ...
- C# axWindowsMediaPlayer制作播放器
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- “equals”和“==”
“equals”和“==” 首先对于基本类型来说,当值相同的时候,地址也是相同的,所以可以使用“==”进行比较,但是对于equals来说,equals比较的是栈中引用指向的堆中的对象.所以在比较对象的 ...
- LaTeX需要renewcommand的地方
发现了两篇关于\renewcommand的文章,希望大家有更好的建议,请多多指教! 文章来源:http://blog.csdn.net/loveaborn/article/details/915205 ...
- poj3233(等比矩阵求和)
poj3233 题意 给出一个 \(n \times n\) 的矩阵 \(A\) ,求 \(A + A^2 + A^3 + ... + A^k\) . 分析 构造矩阵 \[ \begin{bmatri ...
- 暴力 【p4098】[HEOI2013]ALO
Description Welcome to ALO ( Arithmetic and Logistic Online).这是一个 VR MMORPG, 如名字所见,到处充满了数学的谜题 现在你拥有 ...
- tomcat安装规范
创建用户 useradd -u 501 tomcat passwd tomcat tomcat安装 tar zxf apache-tomcat-8.5.5.tar.gz -C /usr/local/ ...
- RabbitMQ生产部署指南
像RabbitMQ这样的数据服务通常有许多可调参数.一些配置对开发有很大的意义,但并不适合生产,本指南旨在为此提供帮助 虚拟主机 例如,在单租户环境中,当您的RabbitMQ集群专门为生产中的单个系统 ...
- JavaScript函数中的参数(arguments)
arguments argument是JavaScript中的一个关键字,用于指向调用者传入的所有参数. function example(x){ alert(x); alert(arguments. ...
- Codeforces 786C Till I Collapse(树状数组+扫描线+倍增)
[题目链接] http://codeforces.com/contest/786/problem/C [题目大意] 给出一个数列,问对于不同的k,将区间划分为几个, 每个区间出现不同元素个数不超过k时 ...