6

EXECUTEを使用してストアドプロシージャを実行しようとすると、procは正常に実行されます。CALLを使用すると、が得られ"ORA-06576: not a valid function or procedure name"ます。ヒキガエルを介して直接接続しています。なぜ電話が使えないのですか?

私はこれらの呼び出しの両方を試しました:

CALL(BPMS_OWNER.DAILY_PARTITION_NOROTATE('MIP_TEST',5,5,'MIP_TEST_',5,FALSE,TRUE));
CALL BPMS_OWNER.DAILY_PARTITION_NOROTATE('MIP_TEST',5,5,'MIP_TEST_',5,FALSE,TRUE);

CALLを使用する必要がある理由は、プラットフォームがSQLをOracleに送信する前に解析するためです。これは、何らかの理由でEXECUTEをサポートしていません。

4

1 に答える 1

19

たとえば、かっこを追加する必要があるという理由だけで、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.
于 2012-08-20T15:16:30.340 に答える