Uw opgeslagen procedures werken als gecodeerd. Het probleem zit in de laatste regel, deze kan geen van uw opgeslagen procedures oproepen.
Drie keuzes in SQL*Plus zijn:call
, exec
, en een vreemd PL/SQL-blok.
call
lijkt een SQL-sleutelwoord te zijn en is gedocumenteerd in de SQL Reference. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Het syntaxisdiagram geeft aan dat parentese vereist is, zelfs als er geen argumenten worden doorgegeven aan de oproeproutine.
CALL test_sp_1();
Een anoniem PL/SQL-blok is PL/SQL dat zich niet in een benoemde procedure, functie, trigger, enz. bevindt. Het kan worden gebruikt om uw procedure aan te roepen.
BEGIN
test_sp_1;
END;
/
Exec
is een SQL*Plus-opdracht die een snelkoppeling is voor het bovenstaande anonieme blok. EXEC <procedure_name>
wordt doorgegeven aan de DB-server als BEGIN <procedure_name>; END;
Volledig voorbeeld:
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>