Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wywołaj procedurę składowaną z inną w Oracle

Twoje procedury składowane działają zgodnie z kodem. Problem dotyczy ostatniej linii, nie można wywołać żadnej z twoich procedur składowanych.

Trzy opcje w SQL*Plus to:call , exec i anonimowy blok PL/SQL.

call wydaje się być słowem kluczowym SQL i jest udokumentowane w dokumentacji SQL. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Diagram składni wskazuje, że nawiasy są wymagane, nawet jeśli do procedury wywołania nie są przekazywane żadne argumenty.

CALL test_sp_1();

Anonimowy blok PL/SQL to PL/SQL, który nie znajduje się w nazwanej procedurze, funkcji, wyzwalaczu itp. Może być użyty do wywołania Twojej procedury.

BEGIN
    test_sp_1;
END;
/

Exec to polecenie SQL*Plus, które jest skrótem do powyższego anonimowego bloku. EXEC <procedure_name> zostanie przekazany do serwera DB jako BEGIN <procedure_name>; END;

Pełny przykład:

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> 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak formatować liczby za pomocą znaku minus/plus w Oracle

  2. Jak przechowywać tylko czas; nie data i godzina?

  3. Jaka jest różnica między „RRRR” a „RRRR” w Oracle SQL?

  4. R12.2 Podsumowanie cyklu aktualizacji online

  5. Najłatwiejsza metoda testowania procedury składowanej Oracle