PL / SQL - procedury

W tym rozdziale omówimy Procedury w PL / SQL. ZAsubprogramto jednostka / moduł programu, który wykonuje określone zadanie. Te podprogramy są łączone w celu utworzenia większych programów. Zasadniczo nazywa się to „konstrukcją modułową”. Podprogram może być wywołany przez inny podprogram lub program o nazwiecalling program.

Można utworzyć podprogram -

  • Na poziomie schematu
  • W opakowaniu
  • Wewnątrz bloku PL / SQL

Na poziomie schematu podprogram to plik standalone subprogram. Jest tworzony za pomocą instrukcji CREATE PROCEDURE lub CREATE FUNCTION. Jest przechowywany w bazie danych i można go usunąć za pomocą instrukcji DROP PROCEDURE lub DROP FUNCTION.

Podprogram utworzony w pakiecie to plik packaged subprogram. Jest przechowywany w bazie danych i można go usunąć tylko wtedy, gdy pakiet zostanie usunięty za pomocą instrukcji DROP PACKAGE. Pakiety omówimy w rozdziale'PL/SQL - Packages'.

Podprogramy PL / SQL nazywane są blokami PL / SQL, które mogą być wywoływane z zestawem parametrów. PL / SQL udostępnia dwa rodzaje podprogramów -

  • Functions- Te podprogramy zwracają pojedynczą wartość; używany głównie do obliczania i zwracania wartości.

  • Procedures- Te podprogramy nie zwracają wartości bezpośrednio; używany głównie do wykonywania akcji.

W tym rozdziale zostaną omówione ważne aspekty PL/SQL procedure. OmówimyPL/SQL function w następnym rozdziale.

Części podprogramu PL / SQL

Każdy podprogram PL / SQL ma nazwę i może mieć również listę parametrów. Podobnie jak anonimowe bloki PL / SQL, nazwane bloki będą również miały następujące trzy części -

S.No Części i opis
1

Declarative Part

Jest to część opcjonalna. Jednak deklaratywna część podprogramu nie rozpoczyna się słowem kluczowym DECLARE. Zawiera deklaracje typów, kursorów, stałych, zmiennych, wyjątków i zagnieżdżonych podprogramów. Pozycje te są lokalne dla podprogramu i przestają istnieć, gdy podprogram kończy wykonywanie.

2

Executable Part

Jest to część obowiązkowa i zawiera stwierdzenia, które wykonują określoną czynność.

3

Exception-handling

To znowu część opcjonalna. Zawiera kod, który obsługuje błędy w czasie wykonywania.

Tworzenie procedury

Procedura jest tworzona z CREATE OR REPLACE PROCEDUREkomunikat. Uproszczona składnia instrukcji CREATE OR REPLACE PROCEDURE jest następująca:

CREATE [OR REPLACE] PROCEDURE procedure_name 
[(parameter_name [IN | OUT | IN OUT] type [, ...])] 
{IS | AS} 
BEGIN 
  < procedure_body > 
END procedure_name;

Gdzie,

  • nazwa-procedury określa nazwę procedury.

  • Opcja [OR REPLACE] umożliwia modyfikację istniejącej procedury.

  • Opcjonalna lista parametrów zawiera nazwę, tryb i typy parametrów. IN reprezentuje wartość, która zostanie przekazana z zewnątrz, a OUT reprezentuje parametr, który zostanie użyty do zwrócenia wartości poza procedurą.

  • treść procedury zawiera część wykonywalną.

  • Słowo kluczowe AS jest używane zamiast słowa kluczowego IS do tworzenia samodzielnej procedury.

Przykład

Poniższy przykład tworzy prostą procedurę, która wyświetla ciąg „Hello World!” na ekranie po wykonaniu.

CREATE OR REPLACE PROCEDURE greetings 
AS 
BEGIN 
   dbms_output.put_line('Hello World!'); 
END; 
/

Gdy powyższy kod zostanie wykonany przy użyciu znaku zachęty SQL, wygeneruje następujący wynik -

Procedure created.

Wykonywanie samodzielnej procedury

Oddzielną procedurę można wywołać na dwa sposoby -

  • Używając EXECUTE słowo kluczowe

  • Wywołanie nazwy procedury z bloku PL / SQL

Powyższa procedura o nazwie 'greetings' można wywołać słowem kluczowym EXECUTE jako -

EXECUTE greetings;

Powyższe wywołanie wyświetli -

Hello World

PL/SQL procedure successfully completed.

Procedurę można również wywołać z innego bloku PL / SQL -

BEGIN 
   greetings; 
END; 
/

Powyższe wywołanie wyświetli -

Hello World  

PL/SQL procedure successfully completed.

Usuwanie samodzielnej procedury

Samodzielna procedura jest usuwana z DROP PROCEDUREkomunikat. Składnia usuwania procedury to -

DROP PROCEDURE procedure-name;

Możesz porzucić procedurę powitania, używając następującej instrukcji -

DROP PROCEDURE greetings;

Tryby parametrów w podprogramach PL / SQL

W poniższej tabeli przedstawiono tryby parametrów w podprogramach PL / SQL -

S.No Tryb parametrów i opis
1

IN

Parametr IN umożliwia przekazanie wartości do podprogramu. It is a read-only parameter. W podprogramie parametr IN działa jak stała. Nie można mu przypisać wartości. Jako parametr IN można przekazać stałą, literał, zainicjowaną zmienną lub wyrażenie. Możesz także zainicjować go do wartości domyślnej; jednakże w tym przypadku jest pomijany w wywołaniu podprogramu.It is the default mode of parameter passing. Parameters are passed by reference.

2

OUT

Parametr OUT zwraca wartość do programu wywołującego. W podprogramie parametr OUT działa jak zmienna. Możesz zmienić jego wartość i odwołać się do wartości po jej przypisaniu.The actual parameter must be variable and it is passed by value.

3

IN OUT

Na IN OUTparametr przekazuje wartość początkową do podprogramu i zwraca zaktualizowaną wartość do programu wywołującego. Można mu przypisać wartość, a wartość można odczytać.

Rzeczywisty parametr odpowiadający parametrowi formalnemu IN OUT musi być zmienną, a nie stałą lub wyrażeniem. Parametrowi formalnemu należy przypisać wartość.Actual parameter is passed by value.

Tryb IN & OUT Przykład 1

Ten program znajduje minimum dwie wartości. Tutaj procedura przyjmuje dwie liczby przy użyciu trybu IN i zwraca ich minimum za pomocą parametrów OUT.

DECLARE 
   a number; 
   b number; 
   c number;
PROCEDURE findMin(x IN number, y IN number, z OUT number) IS 
BEGIN 
   IF x < y THEN 
      z:= x; 
   ELSE 
      z:= y; 
   END IF; 
END;   
BEGIN 
   a:= 23; 
   b:= 45; 
   findMin(a, b, c); 
   dbms_output.put_line(' Minimum of (23, 45) : ' || c); 
END; 
/

Gdy powyższy kod jest wykonywany w wierszu polecenia SQL, daje następujący wynik -

Minimum of (23, 45) : 23  

PL/SQL procedure successfully completed.

Tryb IN & OUT Przykład 2

Ta procedura oblicza kwadrat wartości przekazanej wartości. Ten przykład pokazuje, jak możemy użyć tego samego parametru do zaakceptowania wartości, a następnie zwrócenia innego wyniku.

DECLARE 
   a number; 
PROCEDURE squareNum(x IN OUT number) IS 
BEGIN 
  x := x * x; 
END;  
BEGIN 
   a:= 23; 
   squareNum(a); 
   dbms_output.put_line(' Square of (23): ' || a); 
END; 
/

Gdy powyższy kod jest wykonywany w wierszu polecenia SQL, daje następujący wynik -

Square of (23): 529 

PL/SQL procedure successfully completed.

Metody przekazywania parametrów

Rzeczywiste parametry można przekazać na trzy sposoby -

  • Notacja pozycyjna
  • Nazwana notacja
  • Notacja mieszana

Notacja pozycyjna

W notacji pozycyjnej procedurę można wywołać jako -

findMin(a, b, c, d);

W notacji pozycyjnej pierwszy rzeczywisty parametr jest podstawiany za pierwszy parametr formalny; drugi rzeczywisty parametr zastępuje drugi parametr formalny i tak dalej. Więc,a jest zastąpiony x, b jest zastąpiony y, c jest zastąpiony z i d jest zastąpiony m.

Nazwana notacja

W notacji nazwanej rzeczywisty parametr jest skojarzony z parametrem formalnym przy użyciu rozszerzenia arrow symbol ( => ). Wywołanie procedury będzie wyglądać następująco -

findMin(x => a, y => b, z => c, m => d);

Notacja mieszana

W notacji mieszanej można mieszać obie notacje w wywołaniu procedury; jednak notacja pozycyjna powinna poprzedzać notację nazwaną.

Następujące połączenie jest legalne -

findMin(a, b, c, m => d);

Jednak jest to niezgodne z prawem:

findMin(x => a, b, c, d);