在oracle中以多个游标作为输出执行过程
如何在oracle中执行具有多个游标作为输出的过程在oracle中以多个游标作为输出执行过程,oracle,Oracle,如何在oracle中执行具有多个游标作为输出的过程 CREATE OR REPLACE PROCEDURE TC_OWNER.usp_GetGEGAllDataBySecurityID( p_SecurityID NUMBER, cur1 OUT sys_refcursor, cur2 OUT sys_refcursor, cur3 OUT sys_refcursor, cur4 OUT sys_refcursor, cur5 OUT sys_refcursor) AS v_Effectiv
CREATE OR REPLACE PROCEDURE TC_OWNER.usp_GetGEGAllDataBySecurityID(
p_SecurityID NUMBER,
cur1 OUT sys_refcursor,
cur2 OUT sys_refcursor,
cur3 OUT sys_refcursor,
cur4 OUT sys_refcursor,
cur5 OUT sys_refcursor)
AS
v_EffectiveDate TIMESTAMP(3);
v_CompanyID NUMBER(10);
BEGIN
SELECT MAX(EffectiveStartDate) INTO v_EffectiveDate
FROM tblGEGSecurityDtls
WHERE SecurityId = p_SecurityID AND SYSDATE BETWEEN EffectiveStartDate
and EffectiveEndDate;
SELECT CompanyID INTO v_CompanyID
FROM tblGEGSecurityDtls
WHERE SecurityId = p_SecurityID AND EffectiveStartDate =
v_EffectiveDate;
usp_GetGEGSecurityDtls(p_SecurityID,cur1);
usp_GetGEGRecommendations(p_SecurityID,cur2);
usp_GetGEGCompanyDtls(v_CompanyID,cur3);
usp_GetGEGSectorRegionData(v_CompanyID,null,cur4);
usp_GetGEGCompanyDivisionData(v_CompanyID,null,cur5);
END;
在这里,任何以usp_u开头的内容都表示一个过程。
每个过程都返回一个表
在sql中也可以轻松实现这一点,但我无法在oracle中执行这一点
CREATE OR REPLACE PROCEDURE TC_OWNER.usp_GetGEGAllDataBySecurityID(
p_SecurityID NUMBER,
cur1 OUT sys_refcursor,
cur2 OUT sys_refcursor,
cur3 OUT sys_refcursor,
cur4 OUT sys_refcursor,
cur5 OUT sys_refcursor)
AS
v_EffectiveDate TIMESTAMP(3);
v_CompanyID NUMBER(10);
BEGIN
SELECT MAX(EffectiveStartDate) INTO v_EffectiveDate
FROM tblGEGSecurityDtls
WHERE SecurityId = p_SecurityID AND SYSDATE BETWEEN EffectiveStartDate
and EffectiveEndDate;
SELECT CompanyID INTO v_CompanyID
FROM tblGEGSecurityDtls
WHERE SecurityId = p_SecurityID AND EffectiveStartDate =
v_EffectiveDate;
usp_GetGEGSecurityDtls(p_SecurityID,cur1);
usp_GetGEGRecommendations(p_SecurityID,cur2);
usp_GetGEGCompanyDtls(v_CompanyID,cur3);
usp_GetGEGSectorRegionData(v_CompanyID,null,cur4);
usp_GetGEGCompanyDivisionData(v_CompanyID,null,cur5);
END;
编辑:根据vc74给出的答案,我尝试使用以下代码打印所有五个表格,但出现错误:
declare
lcur1 sys_refcursor;
lcur2 sys_refcursor;
lcur3 sys_refcursor;
lcur4 sys_refcursor;
lcur5 sys_refcursor;
begin
usp_GetGEGAllDataBySecurityID(
p_SecurityID => 457,
cur1 => lcur1,
cur2 => lcur2,
cur3 => lcur3,
cur4 => lcur4,
cur5 => lcur5
);
end;
print lcur1;
print lcur2;
print lcur3;
print lcur4;
print lcur5;
如何在输出窗口中打印所有表?在Oracle中,事情不是那么简单,您必须显式声明游标。在蟾蜍中以网格显示光标
variable outer_cur1 refcursor
variable outer_cur2 refcursor
variable outer_cur3 refcursor
variable outer_cur4 refcursor
variable outer_cur5 refcursor
declare
inner_cur1 sys_refcursor;
inner_cur2 sys_refcursor;
inner_cur3 sys_refcursor;
inner_cur4 sys_refcursor;
inner_cur5 sys_refcursor;
begin
pkg_cur1s.get(
pnum_scen_id => 671,
pcsr_cur1 => inner_cur1,
pcsr_cur2 => inner_cur2,
pcsr_cur3 => inner_cur3,
pcsr_cur4 => inner_cur4,
pcsr_cur5 => inner_cur5
);
:outer_cur1 := inner_cur1;
:outer_cur2 := inner_cur2;
:outer_cur3 := inner_cur3;
:outer_cur4 := inner_cur4;
:outer_cur5 := inner_cur5;
end;
print outer_cur1
print outer_cur2
print outer_cur3
print outer_cur4
print outer_cur5
在何处执行表单-您是否正在从SQL*Plus或SQL Developer之类的客户端运行/测试表单(如果是,是哪一个)。或者通过JDBC、.net或其他方式从应用程序调用它?我正在用TOAD for oracle进行测试。但是如何在输出窗口中查看五个表的数据。是否有相关命令?请编辑用于在输出窗口中打印输出的代码。@vikky我已更新代码,以在TOAD中显示光标