sql >> Databasteknik >  >> RDS >> Oracle

Anropa en lagrad procedur med en annan i Oracle

Dina lagrade procedurer fungerar som kodade. Problemet är med den sista raden, den kan inte anropa någon av dina lagrade procedurer.

Tre val i SQL*Plus är:call , exec , och ett anonymt PL/SQL-block.

ring verkar vara ett SQL-nyckelord och finns dokumenterat i SQL Reference. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG Syntaxdiagrammet indikerar att parentes krävs, även när inga argument skickas till anropsrutinen.

CALL test_sp_1();

Ett anonymt PL/SQL-block är PL/SQL som inte finns i en namngiven procedur, funktion, trigger etc. Det kan användas för att anropa din procedur.

BEGIN
    test_sp_1;
END;
/

Exec är ett SQL*Plus-kommando som är en genväg för ovanstående anonyma block. EXEC kommer att skickas till DB-servern som BEGIN ; END;

Fullständigt exempel:

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. Vad ska man säga om väntetypen ASYNC NETWORK IO?

  2. Hur undkommer man strängar i SQL Server med PHP?

  3. Hur man inte visar dubbletter i SQL

  4. Hur man övervakar PostgreSQL som körs inuti en Docker-behållare:Del två