ストアドプロシージャはコード化されたとおりに機能します。問題は最後の行にあり、どちらのストアドプロシージャも呼び出せません。
SQL*Plusの3つの選択肢は次のとおりです。call
、exec
、および匿名のPL/SQLブロック。
call
SQLキーワードのようであり、SQLリファレンスに記載されています。 http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG構文図は、呼び出しルーチンに引数が渡されていない場合でも、括弧が必要であることを示しています。
CALL test_sp_1();
匿名のPL/SQLブロックは、名前付きプロシージャ、関数、トリガーなどの内部にないPL/SQLです。プロシージャの呼び出しに使用できます。
BEGIN
test_sp_1;
END;
/
Exec
上記の匿名ブロックのショートカットであるSQL*Plusコマンドです。 EXEC <procedure_name>
BEGIN <procedure_name>; END;
完全な例:
SQL> SET SERVEROUTPUT ON
SQL> CREATE OR REPLACE PROCEDURE test_sp
2 AS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Test works');
5 END;
6 /
Procedure created.
SQL> CREATE OR REPLACE PROCEDURE test_sp_1
2 AS
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Testing');
5 test_sp;
6 END;
7 /
Procedure created.
SQL> CALL test_sp_1();
Testing
Test works
Call completed.
SQL> exec test_sp_1
Testing
Test works
PL/SQL procedure successfully completed.
SQL> begin
2 test_sp_1;
3 end;
4 /
Testing
Test works
PL/SQL procedure successfully completed.
SQL>