暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 在匿名块中执行过程返回ORA-06550和PLS-00222

ASKTOM 2019-04-10
1213

问题描述

嗨,我创建了这些对象:
-------------------------------
create table mwallet.tb_test
(test_id number GENERATED ALWAYS AS IDENTITY,
 test_name varchar2(50)
);
 

-------------------------------
create or replace procedure test_user.pr_test_input_only
  (vr_test_name in varchar2
  )
as
begin
  insert into
    test_user.tb_test(test_name)
  values (vr_test_name);

  COMMIT;
end;
 

-------------------------------
我试图执行的过程为 “test_user” 与所有的特权和代码:

declare
  vr_Return number;
begin
  vr_Return := mwallet.pr_test_input_only
  (vr_test_name => 'pr_test_input_only'
  );
end;
 


它返回我:

错误报告-
ORA-06550: 第4行第16列:
PLS-00222: 此作用域中不存在名称为 “PR_TEST_INPUT_ONLY” 的函数
ORA-06550: 第4行第3列:
PL/SQL: 语句已忽略
06550. 00000-"行 % s,列 % s:\ n % s"
* 原因: 通常是PL/SQL编译错误。
* 行动:
-------------------------------

有什么想法为什么它不起作用吗?

专家解答

因为你已经创建了一个程序。不是函数。

过程没有返回值。函数可以。

如果要从过程中 “返回” 值,则需要使用out参数。有关 (vs a函数) 的更多讨论,请参见:

https://asktom.oracle.com/pls/asktom/asktom.search?tag=procedure-having-out-parameter-vs-function

也...

该过程存在于用户TEST_USER中。但是您的代码正在寻找用户MWALLET中的函数。我假设这是一个复制粘贴错误...
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论