1

尝试 SQLDeveloper 的单元测试功能时出现此问题。

在对在我的模式中创建的过程运行测试时,我看到一个错误,但是当在 oracle 提供的模式之一中运行相同的过程时,它可以正常工作。

SQL Developer 生成以下调用:

1)这个不起作用(错误如下所示):

BEGIN
 "IANC"."SIMPLE_PARAMETER"(P_X => 123);
END;

2)这个做:

BEGIN
 "HR"."SIMPLE_PARAMETER"(P_X => 123);
END;

这是程序:

CREATE OR REPLACE PROCEDURE SIMPLE_PARAMETER 
(
  P_X IN NUMBER  
)
IS
BEGIN

  null;

END SIMPLE_PARAMETER;

以下是 SQLPLUS 的输出,您可以在其中看到该过程何时在我的架构中运行我看到一个错误,而在另一个架构中运行相同的过程时该过程按预期工作:

在此处输入图像描述

如有需要,我正在使用 Oracle Enterprise Edition 11.2.0.1.0

更新

显示程序签名的屏幕截图

在此处输入图像描述

我还应该提到,如果我从过程调用中删除模式名称,那么过程会按预期运行并完成。

提前感谢您收到的任何帮助。

4

1 回答 1

2

您确定 IANC 中的 SIMPLE_PARAMETER 程序与 HR 中的程序相同(或至少具有相同的签名)吗?你从 `DESCRIBE "IANC"."SIMPLE_PARAMETER" 中得到什么。

(PS 因为你的标识符都是大写的,你根本不需要双引号。)

补充:另一种可能性是您在 IANC 模式中有一个名为 IANC 的包,因此 Oracle 正在该包中寻找一个名为 SIMPLE_PARAMETER 的过程,该过程不存在。例子:

SQL> exec bigdecimaltest

PL/SQL procedure successfully completed.

SQL> exec dcosta.bigdecimaltest

PL/SQL procedure successfully completed.

SQL> create or replace package dcosta as
  2  end;
  3  /

Package created.

SQL> exec dcosta.bigdecimaltest
BEGIN dcosta.bigdecimaltest; END;

             *
ERROR at line 1:
ORA-06550: line 1, column 14:
PLS-00302: component 'BIGDECIMALTEST' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

这似乎是错误的行为——如果将名称解析为 package.member 的尝试不成功,我认为 Oracle 应该将其作为 schema.object 尝试,但它看起来就像在包名称上找到匹配项它不会重新考虑这一点。

于 2012-05-31T20:17:34.400 回答