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.

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:
- W parametrze
- Parametr WYJŚCIOWY
- 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.
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.
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 |


