为啥我在调用 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?

为啥我在使用 foreach 时会收到 ***Error?

为啥我在使用 img 标签时会收到 403 禁止?

为啥我在尝试使用 HttpListener 时会收到“AccessDenied”? [复制]

为啥我在使用 Jetpack Compose TextField 时会出错?

为啥我在实际工作时会收到“Fetch failed loading”?