以下是我的Package Body方法的顶部部分:
PROCEDURE GetPortfolioAppsAndProjects
(
loginId IN VARCHAR2 := NULL,
portfolioId IN NUMBER := NULL,
portfolioType IN VARCHAR := NULL,
ic IN VARCHAR := NULL,
AppIds_CUR IN OUT SYS_REFCURSOR
)
IS
INVALID_PORTFOLIO_TYPE EXCEPTION;
BEGIN
当我从PL / SQL执行对话框执行时,这运行正常。 我需要能够从SQL查询窗口运行它并加入其他表以及不开发的内容。
我试图从Sql窗口执行这个sql:
DECLARE AppIds_CUR SYS_REFCURSOR;
BEGIN
IREPORT_PORTFOLIOS.GetPortfolioAppsAndProjects('EVANSF', null, null, null, :AppIds_CUR);
END;
我收到了这个错误:
PLS-00306: wrong number or types of arguments in call to 'GETPORTFOLIOAPPSANDPROJECTS'
我计算5个传入(包括一个IN OUT光标)。 在我的通话中,我传递包括光标在内的5。 如何将光标结果输出到输出变量窗口。
答案 0 :(得分:1)
AppIds_CUR
在您的区块中本地声明;你不需要通过在冒号之前将它作为绑定变量来对待它:
DECLARE
AppIds_CUR SYS_REFCURSOR;
BEGIN
IREPORT_PORTFOLIOS.GetPortfolioAppsAndProjects('EVANSF', null, null, null, AppIds_CUR);
END;
如果你在SQL Developer中运行你所拥有的语句,它会提示你输入一个绑定值,这不是你想要发生的事情,并将它视为varchar而不是ref游标 - 因此错误类型的错误。
您需要循环光标并使用此方法使用dbms_output
手动显示其值。但是你可以使用一个绑定变量,如果你把它作为脚本运行,通过声明类型 - 这将在块之外,所以你不需要declare
:
variable AppIds_CUR REFCURSOR;
BEGIN
IREPORT_PORTFOLIOS.GetPortfolioAppsAndProjects('EVANSF', null, null, null, :AppIds_CUR);
END;
/
print AppIds_CUR
您可以使用SQL Developer print
命令显示游标内容。