Prosedur tersimpan Anda berfungsi sebagai kode. Masalahnya adalah dengan baris terakhir, ia tidak dapat memanggil salah satu prosedur tersimpan Anda.
Tiga pilihan dalam SQL*Plus adalah:call
, exec
, dan blok PL/SQL anonim.
call
tampaknya menjadi kata kunci SQL, dan didokumentasikan dalam Referensi SQL. http://download.Oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Diagram sintaks menunjukkan bahwa parentesis diperlukan, bahkan ketika tidak ada argumen yang diteruskan ke rutin panggilan.
CALL test_sp_1();
Blok PL/SQL anonim adalah PL/SQL yang tidak berada di dalam prosedur bernama, fungsi, pemicu, dll. Ini dapat digunakan untuk memanggil prosedur Anda.
BEGIN
test_sp_1;
END;
/
Exec
adalah perintah SQL*Plus yang merupakan jalan pintas untuk blok anonim di atas. EXEC <procedure_name>
akan diteruskan ke server DB sebagai BEGIN <procedure_name>; END;
Contoh lengkap:
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>