为啥我在调用 Package PROC 时会收到 PLS-00306: wrong number or types of arguments 错误?
Posted
技术标签:
【中文标题】为啥我在调用 Package PROC 时会收到 PLS-00306: wrong number or types of arguments 错误?【英文标题】:Why do I get the PLS-00306: wrong number or types of arguments error when calling a Package PROC?为什么我在调用 Package PROC 时会收到 PLS-00306: wrong number or types of arguments 错误? 【发布时间】:2015-09-03 16:33:25 【问题描述】:这是我的 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,包括光标。 如何将光标的结果显示到输出变量窗口。
【问题讨论】:
【参考方案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
命令显示光标内容。
【讨论】:
不,我的光标是在块之外声明的。基本上你所做的只是将 DECLARE 更改为 VARIABLE。我试过了,但仍然收到相同的错误消息; PLS-00306:调用“GETPORTFOLIOAPPSANDPROJECTS”时参数的数量或类型错误 @Sam - 您的原始代码具有DECLARE AppIds_CUR SYS_REFCURSOR;
,它将AppIds_CUR
声明为块本地的PL/SQL 变量。在我的第一个版本中,我更改了对变量的引用以删除冒号。在我的第二个版本中,variable
命令将绑定变量声明给客户端,而不是块,因此它需要冒号。我对你的评论感到困惑,说问题仍然存在,但答案被接受了......以上是关于为啥我在调用 Package PROC 时会收到 PLS-00306: wrong number or types of arguments 错误?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在停止 MediaRecorder 时会收到 IllegalStateException?
为啥我在尝试使用 HttpListener 时会收到“AccessDenied”? [复制]