Dine lagrede procedurer fungerer som kodede. Problemet er med den sidste linje, den er ikke i stand til at påberåbe nogen af dine lagrede procedurer.
Tre valgmuligheder i SQL*Plus er:kald
, exec
, og en anonym PL/SQL-blok.
opkald
ser ud til at være et SQL nøgleord, og er dokumenteret i SQL Reference. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Syntaksdiagrammet angiver, at parentese er påkrævet, selv når ingen argumenter sendes til opkaldsrutinen.
CALL test_sp_1();
En anonym PL/SQL-blok er PL/SQL, der ikke er inde i en navngivet procedure, funktion, trigger osv. Den kan bruges til at kalde din procedure.
BEGIN
test_sp_1;
END;
/
Exec
er en SQL*Plus-kommando, der er en genvej til ovenstående anonyme blok. EXEC
BEGIN
Fuldstændig eksempel:
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>