Twoje procedury składowane działają zgodnie z kodem. Problem dotyczy ostatniej linii, nie można wywołać żadnej z twoich procedur składowanych.
Trzy opcje w SQL*Plus to:call
, exec
i anonimowy blok PL/SQL.
call
wydaje się być słowem kluczowym SQL i jest udokumentowane w dokumentacji SQL. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Diagram składni wskazuje, że nawiasy są wymagane, nawet jeśli do procedury wywołania nie są przekazywane żadne argumenty.
CALL test_sp_1();
Anonimowy blok PL/SQL to PL/SQL, który nie znajduje się w nazwanej procedurze, funkcji, wyzwalaczu itp. Może być użyty do wywołania Twojej procedury.
BEGIN
test_sp_1;
END;
/
Exec
to polecenie SQL*Plus, które jest skrótem do powyższego anonimowego bloku. EXEC <procedure_name>
zostanie przekazany do serwera DB jako BEGIN <procedure_name>; END;
Pełny przykład:
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>