Le tue stored procedure funzionano come codificate. Il problema è con l'ultima riga, non è in grado di richiamare nessuna delle tue stored procedure.
Tre scelte in SQL*Plus sono:call
, exec
e un anonimo blocco PL/SQL.
call
sembra essere una parola chiave SQL ed è documentata in SQL Reference. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Il diagramma sintattico indica che le parentesi graffe sono obbligatorie, anche quando non vengono passati argomenti alla routine di chiamata.
CALL test_sp_1();
Un blocco PL/SQL anonimo è PL/SQL che non si trova all'interno di una procedura denominata, funzione, trigger, ecc. Può essere utilizzato per chiamare la procedura.
BEGIN
test_sp_1;
END;
/
Exec
è un comando SQL*Plus che è una scorciatoia per il blocco anonimo sopra. EXEC <procedure_name>
verrà passato al server DB come BEGIN <procedure_name>; END;
Esempio completo:
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>