Oracle
 sql >> Database >  >> RDS >> Oracle

Chiama una stored procedure con un'altra in Oracle

Le tue stored procedure funzionano come codificate. Il problema è con l'ultima riga, non è in grado di richiamare nessuna delle tue stored procedure.

Tre scelte in SQL*Plus sono:call , exec e un anonimo blocco PL/SQL.

call sembra essere una parola chiave SQL ed è documentata in SQL Reference. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Il diagramma sintattico indica che le parentesi graffe sono obbligatorie, anche quando non vengono passati argomenti alla routine di chiamata.

CALL test_sp_1();

Un blocco PL/SQL anonimo è PL/SQL che non si trova all'interno di una procedura denominata, funzione, trigger, ecc. Può essere utilizzato per chiamare la procedura.

BEGIN
    test_sp_1;
END;
/

Exec è un comando SQL*Plus che è una scorciatoia per il blocco anonimo sopra. EXEC <procedure_name> verrà passato al server DB come BEGIN <procedure_name>; END;

Esempio 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>