Oracle Procedury i funkcje składowane PL/SQL z przykładami

⚡ Inteligentne podsumowanie

Podprogramy PL/SQL to nazwane bloki, procedury i funkcje, przechowywane w bazie danych i wywoływane po nazwie. Procedura uruchamia proces, a funkcja zwraca wartość, wymieniając dane za pomocą parametrów IN, OUT i IN OUT oraz słowa kluczowego RETURN.

  • 🧩 Dwa podprogramy: Procedury wykonują proces; funkcje wykonują obliczenia i zwracają wartość.
  • 🔌 Parametry: IN przekazuje dane wejściowe, OUT zwraca dane wyjściowe, a IN OUT wykonuje obydwa zadania.
  • ↩️ POWRÓT: Zwraca sterowanie do wywołującego; w przypadku funkcji zwraca również wartość zadeklarowanego typu.
  • 🗄️ Przechowywane obiekty: Oba są zapisywane jako obiekty bazy danych i można je wywoływać z innych bloków.
  • 🔎 WYBIERZ Użyj: Funkcję bez DML można wywołać wewnątrz instrukcji SELECT; procedury nie można.
  • ⚖️. Kluczowa różnica: Funkcja musi zwracać wartość, w przeciwieństwie do procedury.
  • 🛠️. Wbudowane funkcje: Oracle gotowe do użycia funkcje konwersji, ciągów znaków i dat.

Oracle Procedury składowane i funkcje PL/SQL

Czym są podprogramy PL/SQL?

W tym samouczku znajdziesz szczegółowy opis tworzenia i wykonywania nazwanych bloków, procedur i funkcji.

Procedury i funkcje to podprogramy, które można tworzyć i zapisywać w bazie danych jako obiekty. Można je wywoływać lub odwoływać się do nich również z poziomu innych bloków.

Omówimy również główne różnice między tymi dwoma podprogramami i omówimy Oracle wbudowane funkcje.

Terminologie w podprogramach PL/SQL

Zanim przyjrzymy się podprogramom PL/SQL, omówimy terminologię stanowiącą część tych podprogramów.

Parametr

Parametr to zmienna lub symbol zastępczy dowolnego prawidłowego parametru Typ danych PL/SQL poprzez który podprogram PL/SQL wymienia wartości z kodem głównym. Ten parametr umożliwia wprowadzanie danych do podprogramów i np.tracwyciąganie z nich wartości.

  • Parametry te należy zdefiniować wraz z podprogramami w momencie ich tworzenia.
  • Są one uwzględniane w instrukcji wywołania w celu interakcji z podprogramami.
  • Typ danych parametru w podprogramie i instrukcji wywołującej powinien być taki sam.
  • Rozmiar typu danych nie powinien być podawany w momencie deklaracji parametru, ponieważ jest dynamiczny.

Ze względu na cel parametry klasyfikuje się jako:

  1. W parametrze
  2. Parametr WYJŚCIOWY
  3. IN OUT Parametr

W parametrze

  • Służy do wprowadzania danych do podprogramów.
  • Jest to zmienna tylko do odczytu wewnątrz podprogramów; jej wartości nie można zmienić wewnątrz podprogramu.
  • W instrukcji wywołującej może to być zmienna, wartość literalna lub wyrażenie, takie jak „5*8” lub „a/b”.
  • Domyślnie parametry są typu IN.

Parametr WYJŚCIOWY

  • Służy do pobierania danych wyjściowych z podprogramów.
  • Jest to zmienna do odczytu i zapisu wewnątrz podprogramów; jej wartość można w nich zmieniać.
  • W wywołaniu zawsze powinna to być zmienna przechowująca wartość z podprogramu.

IN OUT Parametr

  • Używany do wprowadzania danych wejściowych i uzyskiwania danych wyjściowych z podprogramów.
  • Jest to zmienna do odczytu i zapisu wewnątrz podprogramów; jej wartość można w nich zmieniać.
  • W wywołaniu zawsze powinna to być zmienna przechowująca wartość z podprogramu.

Typ parametru należy podać w momencie tworzenia podprogramów.

POWRÓT

RETURN to słowo kluczowe, które instruuje kompilator, aby przełączył sterowanie z podprogramu na instrukcję wywołującą. W podprogramie RETURN oznacza po prostu, że sterowanie musi wyjść z podprogramu; po znalezieniu RETURN przez kontroler, kod po nim jest pomijany.

Zwykle blok nadrzędny lub główny wywołuje podprogramy, a sterowanie jest przekazywane z bloku nadrzędnego do wywoływanego podprogramu. Instrukcja RETURN w podprogramie zwraca sterowanie z powrotem do bloku nadrzędnego. W przypadku funkcji instrukcja RETURN zwraca również wartość, której typ danych jest określony w momencie deklaracji funkcji.

Czym jest procedura w PL/SQL?

A Procedura W PL/SQL jest to jednostka podprogramu składająca się z grupy instrukcji PL/SQL, które można wywołać po nazwie. Każda procedura ma swoją unikalną nazwę i jest przechowywana w Oracle baza danych jako obiekt bazy danych.

Uwaga: Podprogram to nic innego jak procedura, którą należy utworzyć ręcznie, zgodnie z wymaganiami. Po utworzeniu jest on przechowywany jako obiekt bazy danych.

Charakterystyka jednostki podprogramu procedury w PL/SQL jest następująca:

  • Procedury to samodzielne bloki, które można przechowywać w baza danych.
  • Można je wywołać po nazwie w celu wykonania instrukcji PL/SQL.
  • Służą głównie do realizacji procesu.
  • Mogą zawierać zagnieżdżone bloki lub być zagnieżdżone wewnątrz innych bloków lub pakietów.
  • Zawierają część deklaracyjną (opcjonalną), część wykonawczą i część obsługi wyjątków (opcjonalną).
  • Wartości mogą być przekazywane do procedury lub pobierane z procedury za pomocą parametrów.
  • Parametry te należy uwzględnić w instrukcji wywołującej.
  • Procedura może zawierać instrukcję RETURN służącą do zwrócenia sterowania do bloku wywołującego, ale nie może ona zwracać żadnej wartości za pomocą instrukcji RETURN.
  • Procedur nie można wywołać bezpośrednio z poleceń SELECT; można je wywołać z innego bloku lub za pomocą słowa kluczowego EXEC.

Składnia

CREATE OR REPLACE PROCEDURE
<procedure_name>
(
<parameter1 IN/OUT <datatype>
..
.
)
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • CREATE PROCEDURE instruuje kompilator, aby utworzył nową procedurę. Słowo kluczowe „OR REPLACE” instruuje go, aby zastąpił istniejącą procedurę (jeśli istnieje) bieżącą.
  • Nazwa procedury powinna być unikatowa.
  • Słowo kluczowe „IS” jest używane, gdy procedura składowana jest zagnieżdżona w innym bloku. Jeśli procedura jest samodzielna, używane jest słowo „AS”. Poza tym standardem kodowania, oba mają to samo znaczenie.

Przykład 1: Tworzenie procedury i wywoływanie jej za pomocą EXEC. W tym przykładzie tworzymy Oracle procedura przyjmująca nazwę jako dane wejściowe i drukująca komunikat powitalny jako dane wyjściowe. Do jej wywołania służy polecenie EXEC.

CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2)
IS
BEGIN
dbms_output.put_line ('Welcome '|| p_name);
END;
/
EXEC welcome_msg ('Guru99');

Code Wyjaśnienie:

  • Code linia 1: Utworzenie procedury o nazwie „welcome_msg” i jednym parametrze „p_name” typu „IN”.
  • Code linia 4: Wydrukuj komunikat powitalny poprzez połączenie wprowadzonej nazwy.
  • Procedura została pomyślnie skompilowana.
  • Code linia 7: Wywołanie procedury za pomocą EXEC z parametrem 'Guru99. Procedura jest wykonywana i wyświetla komunikat „Witamy” Guru99 ”.

Co to jest funkcja?

Funkcja to samodzielny podprogram PL/SQL. Podobnie jak procedura, funkcja ma unikalną nazwę i jest przechowywana jako obiekt bazy danych PL/SQL. Jej cechy to:

  • Funkcje to samodzielne bloki służące głównie do obliczeń.
  • Funkcja używa słowa kluczowego RETURN w celu zwrócenia wartości, której typ danych jest zdefiniowany w momencie tworzenia.
  • Funkcja powinna albo zwracać wartość, albo zgłaszać wyjątek; return jest w funkcjach obowiązkowy.
  • Funkcja bez instrukcji DML może być wywołana bezpośrednio w zapytaniu SELECT, natomiast funkcja z instrukcjami DML może być wywołana wyłącznie z innych bloków PL/SQL.
  • Może zawierać zagnieżdżone bloki lub być zagnieżdżony wewnątrz innych bloków lub pakietów.
  • Zawiera część deklaracyjną (opcjonalną), część wykonawczą i część obsługi wyjątków (opcjonalną).
  • Wartości mogą być przekazywane do funkcji lub pobierane z niej za pomocą parametrów.
  • Parametry te należy uwzględnić w instrukcji wywołującej.
  • Funkcja może również zwracać wartość za pomocą parametrów OUT oprócz użycia RETURN.
  • Ponieważ zawsze zwraca wartość, polecenie wywołujące zawsze używa operatora przypisania do wypełnienia zmiennej.

Struktura funkcji PL/SQL

Składnia

CREATE OR REPLACE FUNCTION
<function_name>
(
<parameter1 IN/OUT <datatype>
)
RETURN <datatype>
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • CREATE FUNCTION nakazuje kompilatorowi utworzenie nowej funkcji. 'OR REPLACE' nakazuje zastąpienie istniejącej funkcji (jeśli istnieje) funkcją bieżącą.
  • Nazwa funkcji powinna być unikatowa.
  • Należy podać typ danych RETURN.
  • Słowo kluczowe „IS” jest używane, gdy funkcja jest zagnieżdżona w innym bloku. Jeśli funkcja jest samodzielna, używane jest słowo kluczowe „AS”.

Przykład 1: Tworzenie funkcji i wywoływanie jej za pomocą bloku anonimowego. W tym programie tworzymy funkcję, która przyjmuje nazwę jako dane wejściowe i zwraca komunikat powitalny, używając anonimowego bloku i instrukcji SELECT do wywołania jej.

Tworzenie funkcji PL/SQL i jej wywoływanie

CREATE OR REPLACE FUNCTION welcome_msg_func ( p_name IN VARCHAR2) RETURN VARCHAR2
IS
BEGIN
RETURN ('Welcome '|| p_name);
END;
/
DECLARE
lv_msg VARCHAR2(250);
BEGIN
lv_msg := welcome_msg_func ('Guru99');
dbms_output.put_line(lv_msg);
END;
/
SELECT welcome_msg_func('Guru99') FROM DUAL;

Code Wyjaśnienie:

  • Code linia 1: Tworzenie funkcji o nazwie „welcome_msg_func” i jednym parametrze „p_name” typu „IN”.
  • Code linia 2: Deklaracja typu zwracanego jako VARCHAR2.
  • Code linia 5: Zwracanie połączonej wartości „Witamy” i wartości parametru.
  • Code linia 8: Anonimowy blok do wywołania powyższej funkcji.
  • Code linia 9: Deklarowanie zmiennej z tym samym typem danych, co typ zwracany przez funkcję.
  • Code linia 11: Wywołanie funkcji i wpisanie wartości zwracanej do zmiennej „lv_msg”.
  • Code linia 12: Wydruk wartości zmiennej. Na wyjściu pojawia się komunikat „Witamy” Guru99 ”.
  • Code linia 14: Wywołanie tej samej funkcji za pomocą instrukcji SELECT. Wartość zwracana jest kierowana na standardowe wyjście.

Podobieństwa między procedurą a funkcją

  • Obydwa można wywołać z innych bloków PL/SQL.
  • Jeżeli wyjątek zgłoszony w podprogramie nie zostanie obsłużony w jego obsługa wyjątków sekcji, propaguje ona do bloku wywołującego.
  • Obydwa mogą mieć dowolną liczbę parametrów.
  • Obydwa są traktowane jako obiekty bazy danych w PL/SQL.

Procedura kontra funkcja: kluczowe różnice

Procedura Funkcjonować
Używane głównie do wykonania określonego procesu. Używane głównie do wykonywania obliczeń.
Nie można wywołać w poleceniu SELECT. Funkcja, która nie zawiera żadnych instrukcji DML, może zostać wywołana w instrukcji SELECT.
Używa parametru OUT w celu zwrócenia wartości. Używa RETURN, aby zwrócić wartość.
Zwrócenie wartości nie jest obowiązkowe. Zwrócenie wartości jest obowiązkowe.
RETURN po prostu opuszcza sterowanie podprogramem. RETURN powoduje wyjście ze sterowania podprogramem i zwraca wartość.
Typ zwracanych danych nie został określony w momencie tworzenia. Typ zwracanych danych jest obowiązkowy w momencie tworzenia.

Wbudowane funkcje w PL/SQL

PL / SQL Zawiera różne wbudowane funkcje do pracy z ciągami znaków i datami. Tutaj przedstawiamy najczęściej używane funkcje i ich zastosowanie.

Funkcje konwersji

Te wbudowane funkcje konwertują jeden typ danych na inny.

Nazwa funkcji Stosowanie Przykład
TO_CHAR Konwertuje inny typ danych na typ danych znakowych. TO_CHAR(123);
TO_DATE (ciąg, format) Konwertuje podany ciąg znaków na datę. Ciąg znaków powinien być zgodny z formatem. TO_DATE('2015 stycznia 15 r., 'RRRR-MON-DD'); Wydajność: 1 / 15 / 2015
TO_NUMBER (tekst, format) Konwertuje tekst na liczbę w podanym formacie. W tym formacie „9” oznacza liczbę cyfr. Wybierz TO_NUMBER('1234′,'9999') z podwójnego; Wydajność: : 1234. Wybierz TO_NUMBER('1,234.45′,'9,999.99') z dual; Wydajność: 1234.45

Funkcje łańcuchowe

Funkcje te są używane w przypadku typu danych znakowych.

Nazwa funkcji Stosowanie Przykład
INSTR(tekst, ciąg, początek, wystąpienie) Podaje pozycję konkretnego tekstu w podanym ciągu. tekst to ciąg główny, ciąg to tekst do wyszukania, start to pozycja początkowa (opcjonalna), a wystąpienie to wystąpienie szukanego ciągu (opcjonalne). Wybierz INSTR('SAMOLOT','E',2,1) z dual; Wydajność: 2. Wybierz INSTR('SAMOLOT','E',2,2) z dual; Wydajność: 9 (2. wystąpienie E)
SUBSTR (tekst, początek, długość) Zwraca wartość podciągu głównego ciągu. text to ciąg główny, start to pozycja początkowa, a length to długość podciągu. wybierz substr('samolot',1,7) z dual; Wydajność: aeropla
GÓRNY (tekst) Zwraca wielkie litery podanego tekstu. Wybierz górną („guru99”) z podwójnej; Wydajność:GURU99
DOLNY (tekst) Zwraca małe litery podanego tekstu. Wybierz lower('AerOpLane') z dual; Wydajność: samolot
INITCAP (tekst) Zwraca podany tekst z wielką literą początkową każdego słowa. Wybierz INITCAP('guru99') z dual; Wydajność: Guru99. Wybierz INITCAP('moja historia') z dual; Wydajność: Moja historia
DŁUGOŚĆ (tekst) Zwraca długość podanego ciągu. Wybierz DŁUGOŚĆ('guru99') z dual; Wydajność: 6
LPAD (tekst, długość, znak_podstawy) Uzupełnia ciąg z lewej strony do podanej długości całkowitej podanym znakiem. Wybierz LPAD('guru99', 10, '$') z dual; Wydajność: $$$$guru99
RPAD (tekst, długość, pad_char) Uzupełnia ciąg z prawej strony do podanej długości całkowitej podanym znakiem. Wybierz RPAD('guru99′,10,'-') z dual; Wydajność: guru99—-
LTRIM (tekst) Przycina początkowe odstępy od tekstu. Wybierz LTRIM(' Guru99') z dualnego; Wydajność: Guru99
RTRIM (tekst) Przycina końcową białą przestrzeń z tekstu. Wybierz RTRIM('Guru99 ') od dualnego; Wydajność: Guru99

Funkcje daty

Funkcje te służą do manipulowania datami.

Nazwa funkcji Stosowanie Przykład
ADD_MONTHS (data, liczba miesięcy) Dodaje podane miesiące do daty. ADD_MONTHS('2015-01-01',5); Wydajność: 05 / 01 / 2015
SYSDATA Zwraca aktualną datę i godzinę serwera. Wybierz SYSDATE z dual; Wydajność: 10, 4:2015:2
PIEŃ Zaokrągla zmienną daty w dół do najniższej możliwej wartości. wybierz sysdate, TRUNC(sysdate) z dual; Wydajność: 10/4/2015 2:12:39 PM, 10/4/2015
ROUND Zaokrągla datę do najbliższej granicy, wyższej lub niższej. Wybierz sysdate, ROUND(sysdate) z dual; Wydajność: 10/4/2015 2:14:34 PM, 10/5/2015
MIESIĄCE_BETWEEN Zwraca liczbę miesięcy pomiędzy dwiema datami. Wybierz MONTHS_BETWEEN (sysdate+60, sysdate) z dual; Wydajność: 2

FAQ

Funkcja musi zwracać wartość i może być używana wewnątrz instrukcji SELECT, jeśli nie zawiera instrukcji DML. Procedura uruchamia proces, nie musi zwracać wartości i nie może być wywoływana z instrukcji SELECT.

IN przekazuje do podprogramu wartość tylko do odczytu. OUT zwraca wartość do wywołującego. IN OUT wykonuje obie te czynności, odbierając wartość i zwracając wartość, która może zostać zmieniona, za pośrednictwem tego samego parametru.

Tak, jeśli nie zawiera instrukcji DML, takiej jak INSERT, UPDATE lub DELETE. Funkcja wykonująca DML może być wywołana tylko z innego bloku PL/SQL, a nie bezpośrednio w zapytaniu.

Tak. Sztuczna inteligencja może stworzyć procedurę CREATE PROCEDURE lub CREATE FUNCTION z odpowiednimi trybami parametrów i typem RETURN na podstawie prostego opisu. RevPrzed wdrożeniem sprawdź parametry i obsługę wyjątków.

OR REPLACE nadpisuje istniejącą procedurę lub funkcję o tej samej nazwie bez usuwaniaping najpierw. Dzięki temu granty pozostają nienaruszone i jest to typowy sposób ponownego wdrażania zmienionego podprogramu.

Podsumuj ten post następująco: