Dina lagrade procedurer fungerar som kodade. Problemet är med den sista raden, den kan inte anropa någon av dina lagrade procedurer.
Tre val i SQL*Plus är:call
, exec
, och ett anonymt PL/SQL-block.
ring
verkar vara ett SQL-nyckelord och finns dokumenterat i SQL Reference. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Syntaxdiagrammet indikerar att parentes krävs, även när inga argument skickas till anropsrutinen.
CALL test_sp_1();
Ett anonymt PL/SQL-block är PL/SQL som inte finns i en namngiven procedur, funktion, trigger etc. Det kan användas för att anropa din procedur.
BEGIN
test_sp_1;
END;
/
Exec
är ett SQL*Plus-kommando som är en genväg för ovanstående anonyma block. EXEC
BEGIN
Fullständigt exempel:
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>