sql >> Databáze >  >> RDS >> Oracle

Zavolejte uloženou proceduru s jinou v Oracle

Vaše uložené procedury fungují jako zakódované. Problém je s posledním řádkem, nelze vyvolat žádnou z vašich uložených procedur.

V SQL*Plus jsou tři možnosti:call , exec a anonymní blok PL/SQL.

call se jeví jako klíčové slovo SQL a je zdokumentováno v příručce SQL Reference. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Syntaktický diagram ukazuje, že jsou vyžadovány závorky, i když nejsou do rutiny volání předány žádné argumenty.

CALL test_sp_1();

Anonymní blok PL/SQL je PL/SQL, který není uvnitř pojmenované procedury, funkce, spouštěče atd. Lze jej použít k volání vaší procedury.

BEGIN
    test_sp_1;
END;
/

Exec je příkaz SQL*Plus, který je zkratkou pro výše uvedený anonymní blok. EXEC <procedure_name> bude předán DB serveru jako BEGIN <procedure_name>; END;

Úplný příklad:

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. Převod data a kultura:Rozdíl mezi DATE a DATETIME

  2. Funkce podobnosti v Postgresu s pg_trgm

  3. Jak vytvořit jednoduchý výběrový dotaz v návrhovém zobrazení v Accessu 2016

  4. Odstraňte data pomocí funkce s hodnotou tabulky na serveru SQL Server