Top > SQL*Plus > CALL と EXECUTE の違い

CALL 文 と EXECUTE コマンドの違い

CALL は Oracle 9i からサポートされた 標準SQL のコマンドであり、EXECUTE は旧来からある SQL*Plus コマンド である。(※ PL/SQL のコマンドでもない)

双方ともファンクションやプロシージャの実行に使用するが、その仕様は異なり新しく用意された CALL が良いというものでもないといえる。

Oracle 10g までは CALL の引数は位置表記法のみに限定されていたが Oracle 11g からは 位置表記法および両方を併用した混合表記も可能になっている。 同時に SQL の関数の呼び出しも 位置表記法と混合表記がサポートされた。 Oracle 11g

EXECUTE の実行例

EXECUTE コマンドは テキストを PL/SQL ブロックに変換してから実行する。
EXECUTE plsql_text; は BEGIN plsql_text; END; に変換してから実行されているということである。

SQL> variable :num number;
SQL> EXECUTE :num := function_hoge('あいう', TRUE);
     ↓ 変換
     BEGIN :num := function_hoge('あいう', TRUE); END;
     ↓ 実行
PL/SQLプロシージャが正常に完了しました。
SQL> print :num
...

CALL の実行例

CALL による呼び出しで、 SQL としてまだサポートされていない BOOLEAN 型 (TRUE/FALSE) を PL/SQL のファンクションに使用すると・・・

SQL> variable :num number;
SQL> CALL function_hoge('あいう', TRUE) INTO :num ;
     *
行1でエラーが発生しました。:
ORA-06553: PLS-306: 'FUNCTION_HOGE'の呼出しで、引数の数または型が正しくありません。

のようにエラーが発生する。

(予想であるが)SQL のパーサー経由(※) と PL/SQL パーサー経由で実行される差のようなものがあると思われる。

(※) CALL 経由で PL/SQL に組み込まれていない関数(例えば ORA_HASH)を呼び出しても利用できないことから SQL として実行はされていない。



日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)