Sus procedimientos almacenados funcionan según lo codificado. El problema está en la última línea, no puede invocar ninguno de sus procedimientos almacenados.
Tres opciones en SQL*Plus son:call
, exec
y un bloque PL/SQL anónimo.
call
parece ser una palabra clave de SQL y está documentada en la Referencia de SQL. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG El diagrama de sintaxis indica que se requieren paréntesis, incluso cuando no se pasan argumentos a la rutina de llamada.
CALL test_sp_1();
Un bloque PL/SQL anónimo es PL/SQL que no está dentro de un procedimiento, función, disparador, etc. con nombre. Puede usarse para llamar a su procedimiento.
BEGIN
test_sp_1;
END;
/
Exec
es un comando SQL*Plus que es un atajo para el bloque anónimo anterior. EXEC <procedure_name>
se pasará al servidor de base de datos como BEGIN <procedure_name>; END;
Ejemplo 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>