仅仅因为需要您添加括号,例如,call
call my_proc()
如果我设置一个小测试:
SQL>
SQL> create or replace procedure test is
2 begin
3 dbms_output.put_line('hi');
4 end;
5 /
Procedure created.
运行这几种不同的方式,你会看到
SQL> exec test
hi
PL/SQL procedure successfully completed.
SQL> call test;
call test
*
ERROR at line 1:
ORA-06576: not a valid function or procedure name
SQL> call test();
hi
Call completed.
为什么需要使用call
?不是exec
,execute
而且begin ... end
够了吗?
根据您的更新,问题是布尔值,它call
似乎不支持。创建另一个小程序
SQL> create or replace procedure test (Pbool boolean ) is
2 begin
3 if Pbool then
4 dbms_output.put_line('true');
5 else
6 dbms_output.put_line('false');
7 end if;
8 end;
9 /
Procedure created.
SQL> show error
No errors.
并运行它证明了这一点
SQL> call test(true);
call test(true)
*
ERROR at line 1:
ORA-06576: not a valid function or procedure name
我不太明白你为什么不能使用的原因,exec
或者execute
假设这些都是禁止使用的,为什么不只使用传统的匿名 PL/SQL 块?
SQL> begin
2 test(true);
3 end;
4 /
true
PL/SQL procedure successfully completed.