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

Kald en lagret procedure med en anden i Oracle

Dine lagrede procedurer fungerer som kodede. Problemet er med den sidste linje, den er ikke i stand til at påberåbe nogen af ​​dine lagrede procedurer.

Tre valgmuligheder i SQL*Plus er:kald , exec , og en anonym PL/SQL-blok.

opkald ser ud til at være et SQL nøgleord, og er dokumenteret i SQL Reference. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Syntaksdiagrammet angiver, at parentese er påkrævet, selv når ingen argumenter sendes til opkaldsrutinen.

CALL test_sp_1();

En anonym PL/SQL-blok er PL/SQL, der ikke er inde i en navngivet procedure, funktion, trigger osv. Den kan bruges til at kalde din procedure.

BEGIN
    test_sp_1;
END;
/

Exec er en SQL*Plus-kommando, der er en genvej til ovenstående anonyme blok. EXEC videregives til DB-serveren som BEGIN ; END;

Fuldstændig eksempel:

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. Hvordan OPDATERER jeg en række i en tabel eller INDSÆTTER den, hvis den ikke findes?

  2. Sådan importeres en database ved hjælp af kommandolinjen

  3. PostgreSQL CSV import fra kommandolinjen

  4. Udforskning af Java Unit Testing med JUnit Test Framework