Seus procedimentos armazenados funcionam como codificados. O problema é com a última linha, ela não consegue invocar nenhum de seus procedimentos armazenados.
Três opções no SQL*Plus são:
call
, exec
, e um bloco PL/SQL anônimo. call
parece ser uma palavra-chave SQL e está documentada na Referência SQL. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG O diagrama de sintaxe indica que os parênteses são necessários, mesmo quando nenhum argumento é passado para a rotina de chamada. CALL test_sp_1();
Um bloco PL/SQL anônimo é PL/SQL que não está dentro de um procedimento nomeado, função, gatilho, etc. Ele pode ser usado para chamar seu procedimento.
BEGIN
test_sp_1;
END;
/
Exec
é um comando SQL*Plus que é um atalho para o bloco anônimo acima. EXEC <procedure_name>
será passado para o servidor DB como BEGIN <procedure_name>; END;
Exemplo 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>