Ihre gespeicherten Prozeduren funktionieren wie codiert. Das Problem liegt in der letzten Zeile, sie kann keine Ihrer gespeicherten Prozeduren aufrufen.
Drei Möglichkeiten in SQL*Plus sind:call
, exec
, und ein anonymer PL/SQL-Block.
call
scheint ein SQL-Schlüsselwort zu sein und ist in der SQL-Referenz dokumentiert. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Das Syntaxdiagramm zeigt an, dass Elternteile erforderlich sind, selbst wenn keine Argumente an die Aufrufroutine übergeben werden.
CALL test_sp_1();
Ein anonymer PL/SQL-Block ist PL/SQL, das sich nicht in einer benannten Prozedur, Funktion, Trigger usw. befindet. Er kann verwendet werden, um Ihre Prozedur aufzurufen.
BEGIN
test_sp_1;
END;
/
Exec
ist ein SQL*Plus-Befehl, der eine Abkürzung für den obigen anonymen Block darstellt. EXEC <procedure_name>
wird als BEGIN <procedure_name>; END;
Vollständiges Beispiel:
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>