Oracle Procedury i funkcje składowane PL/SQL z przykładami
Procedury i funkcje to podprogramy, które można tworzyć i zapisywać w bazie danych jako obiekty bazy danych. Można je wywoływać lub odnosić się do nich również w innych blokach.
Oprócz tego omówimy główne różnice między tymi dwoma podprogramami. Będziemy także omawiać Oracle wbudowane funkcje.
Terminologie w podprogramach PL/SQL
Zanim poznamy podprogramy PL/SQL, omówimy różne terminologie występujące w tych podprogramach. Poniżej znajdują się terminologie, które będziemy omawiać.
Parametr
Parametr jest zmienną lub symbolem zastępczym dowolnego prawidłowego Typ danych PL/SQL za pomocą którego podprogram PL/SQL wymienia wartości z kodem głównym. Ten parametr umożliwia wprowadzanie danych do podprogramów i wyciąganie z nich danych.
- Parametry te należy zdefiniować wraz z podprogramami w momencie ich tworzenia.
- Parametry te są zawarte w instrukcji wywołania tych podprogramów w celu interakcji wartości z podprogramami.
- Typ danych parametru w podprogramie i instrukcja wywołująca powinny być takie same.
- Rozmiar typu danych nie powinien być wymieniany w momencie deklaracji parametrów, ponieważ rozmiar jest dynamiczny dla tego typu.
W zależności od przeznaczenia parametry są klasyfikowane jako
- W parametrze
- Parametr WYJŚCIOWY
- IN OUT Parametr
W parametrze
- Ten parametr służy do wprowadzania danych wejściowych do podprogramów.
- Jest to zmienna przeznaczona tylko do odczytu wewnątrz podprogramów. Ich wartości nie można zmieniać wewnątrz podprogramu.
- W instrukcji wywołującej parametry te mogą być zmienną, wartością dosłowną lub wyrażeniem, na przykład może to być wyrażenie arytmetyczne, takie jak „5*8” lub „a/b”, gdzie „a” i „b” są zmiennymi .
- Domyślnie parametry są typu IN.
Parametr WYJŚCIOWY
- Ten parametr służy do uzyskiwania danych wyjściowych z podprogramów.
- Jest to zmienna do odczytu i zapisu wewnątrz podprogramów. Ich wartości można zmieniać wewnątrz podprogramów.
- W instrukcji wywołującej parametry te powinny zawsze być zmienną przechowującą wartość z bieżącego podprogramu.
IN OUT Parametr
- Ten parametr służy zarówno do podawania danych wejściowych, jak i do uzyskiwania danych wyjściowych z podprogramów.
- Jest to zmienna do odczytu i zapisu wewnątrz podprogramów. Ich wartości można zmieniać wewnątrz podprogramów.
- W instrukcji wywołującej parametry te powinny zawsze być zmienną przechowującą wartość z podprogramów.
O tym typie parametrów należy wspomnieć podczas tworzenia podprogramów.
POWRÓT
RETURN jest słowem kluczowym, które instruuje kompilator, aby przełączył kontrolę z podprogramu na instrukcję wywołującą. W podprogramie RETURN oznacza po prostu, że sterowanie musi wyjść z podprogramu. Gdy sterownik znajdzie w podprogramie słowo kluczowe RETURN, następujący po nim kod zostanie pominięty.
Zwykle blok nadrzędny lub główny wywołuje podprogramy, a następnie sterowanie przechodzi z tych bloków nadrzędnych do wywoływanych podprogramów. RETURN w podprogramie zwróci sterowanie z powrotem do ich bloku nadrzędnego. W przypadku funkcji polecenie RETURN również zwraca wartość. Typ danych tej wartości jest zawsze wymieniony w momencie deklaracji funkcji. Typ danych może być dowolnym prawidłowym typem danych PL/SQL.
Co to jest procedura w PL/SQL?
A Procedura w PL/SQL to jednostka podprogramu składająca się z grupy instrukcji PL/SQL, które można wywołać po nazwie. Każda procedura w PL/SQL ma swoją własną, unikalną nazwę, pod którą można się do niej odwoływać i wywoływać. Ta jednostka podprogramu w Oracle Baza danych jest przechowywana jako obiekt bazy danych.
Uwaga: Podprogram to nic innego jak procedura i należy go utworzyć ręcznie zgodnie z wymaganiami. Po utworzeniu będą przechowywane jako obiekty bazy danych.
Poniżej przedstawiono charakterystykę jednostki podprogramu Procedura w języku PL/SQL:
- Procedury są samodzielnymi blokami programu, które można przechowywać w pliku baza danych.
- Aby wykonać instrukcje PL/SQL, można wywołać te procedury PLSQL, odwołując się do ich nazwy.
- Służy głównie do wykonywania procesów w języku PL/SQL.
- Może mieć zagnieżdżone bloki lub może być zdefiniowany i zagnieżdżony w innych blokach lub pakietach.
- Zawiera część deklaracyjną (opcjonalnie), część wykonawczą, część dotyczącą obsługi wyjątków (opcjonalnie).
- Wartości można przekazywać do Oracle procedury lub pobierane z procedury poprzez parametry.
- Parametry te należy uwzględnić w instrukcji wywołującej.
- Procedura w języku SQL może zawierać instrukcję RETURN, która zwraca kontrolę do bloku wywołującego, ale nie może zwracać żadnych wartości poprzez instrukcję RETURN.
- Procedur nie można wywoływać bezpośrednio z instrukcji SELECT. Można je wywołać z innego bloku lub poprzez słowo kluczowe EXEC.
Składnia
CREATE OR REPLACE PROCEDURE <procedure_name> ( <parameterl IN/OUT <datatype> .. . ) [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- CREATE PROCEDURE instruuje kompilator, aby utworzył nową procedurę w Oracle. Słowo kluczowe „OR REPLACE” instruuje kompilację, aby zastąpiła istniejącą procedurę (jeśli istnieje) bieżącą.
- Nazwa procedury powinna być unikalna.
- Słowo kluczowe „IS” zostanie użyte, gdy procedura składowana w Oracle jest zagnieżdżony w innych blokach. Jeśli procedura jest samodzielna, zostanie użyte słowo „AS”. Poza tym standardem kodowania oba mają to samo znaczenie.
Przykład 1: Tworzenie procedury i wywoływanie jej przy użyciu EXEC
W tym przykładzie utworzymy plik Oracle procedura, która przyjmuje nazwę jako dane wejściowe i wypisuje wiadomość powitalną jako wynik. Będziemy używać polecenia EXEC do wywołania procedury.
CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2) IS BEGIN dbms_output.put_line (‘Welcome '|| p_name); END; / EXEC welcome_msg (‘Guru99’);
Wyjaśnienie kodu:
- Linia kodu 1: Utworzenie procedury o nazwie „welcome_msg” i jednym parametrze „p_name” typu „IN”.
- Linia kodu 4: Drukowanie wiadomości powitalnej poprzez połączenie nazwy wejściowej.
- Procedura została pomyślnie skompilowana.
- Linia kodu 7: Wywołanie procedury za pomocą polecenia EXEC z parametrem „Guru99”. Procedura zostanie wykonana, a wiadomość zostanie wydrukowana jako „Witamy Guru99”.
Co to jest funkcja?
Functions jest samodzielnym podprogramem PL/SQL. Podobnie jak procedura PL/SQL, funkcje mają unikalną nazwę, pod którą można się do nich odnosić. Są one przechowywane jako obiekty bazy danych PL/SQL. Poniżej znajdują się niektóre charakterystyki funkcji.
- Funkcje są samodzielnym blokiem używanym głównie do celów obliczeniowych.
- Funkcja używa słowa kluczowego RETURN do zwrócenia wartości, a jej typ danych jest zdefiniowany w momencie tworzenia.
- Funkcja powinna albo zwrócić wartość, albo zgłosić wyjątek, tj. powrót jest obowiązkowy w funkcjach.
- Funkcja bez instrukcji DML może być bezpośrednio wywołana w zapytaniu SELECT, natomiast funkcja z operacją DML może być wywołana wyłącznie z innych bloków PL/SQL.
- Może mieć zagnieżdżone bloki lub może być zdefiniowany i zagnieżdżony w innych blokach lub pakietach.
- Zawiera część deklaracyjną (opcjonalnie), część wykonawczą, część dotyczącą obsługi wyjątków (opcjonalnie).
- Wartości można przekazać do funkcji lub pobrać z procedury poprzez parametry.
- Parametry te należy uwzględnić w instrukcji wywołującej.
- Funkcja PLSQL może również zwracać wartość poprzez parametry OUT w inny sposób niż przy użyciu RETURN.
- Ponieważ zawsze zwróci wartość, podczas wywołania instrukcji zawsze stosuje się operator przypisania, aby wypełnić zmienne.
Składnia
CREATE OR REPLACE FUNCTION <procedure_name> ( <parameterl IN/OUT <datatype> ) RETURN <datatype> [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- CREATE FUNCTION instruuje kompilator, aby utworzył nową funkcję. Słowo kluczowe „OR REPLACE” instruuje kompilator, aby zastąpił istniejącą funkcję (jeśli istnieje) bieżącą.
- Nazwa funkcji powinna być unikalna.
- Należy wspomnieć o typie danych RETURN.
- Słowo kluczowe „IS” zostanie użyte, gdy procedura będzie zagnieżdżona w innych blokach. Jeśli procedura jest samodzielna, zostanie użyte słowo „AS”. Poza tym standardem kodowania oba mają to samo znaczenie.
Przykład 1: Tworzenie funkcji i wywoływanie jej za pomocą bloku anonimowego
W tym programie utworzymy funkcję, która przyjmie nazwę jako dane wejściowe i zwróci wiadomość powitalną jako wynik. Do wywołania funkcji użyjemy instrukcji bloku anonimowego i instrukcji Select.
CREATE OR REPLACE FUNCTION welcome_msgJune ( p_name IN VARCHAR2) RETURN VAR.CHAR2 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;
Wyjaśnienie kodu:
- Linia kodu 1: Tworzenie Oracle funkcja o nazwie 'welcome_msg_func' i jednym parametrze 'p_name' typu 'IN'.
- Linia kodu 2: deklarowanie typu zwracanego jako VARCHAR2
- Linia kodu 5: Zwracanie połączonej wartości „Witamy” i wartości parametru.
- Linia kodu 8: Anonimowy blok do wywołania powyższej funkcji.
- Linia kodu 9: Deklarowanie zmiennej o typie danych takim samym jak typ danych zwracanych przez funkcję.
- Linia kodu 11: Wywołanie funkcji i zapisanie wartości zwracanej do zmiennej „lv_msg”.
- Linia kodu 12: Drukowanie wartości zmiennej. Wynik, który tutaj otrzymasz, to „Witamy Guru99”
- Linia kodu 14: Wywołanie tej samej funkcji poprzez instrukcję SELECT. Wartość zwracana jest kierowana bezpośrednio na standardowe wyjście.
Podobieństwa między procedurą a funkcją
- Obydwa można wywołać z innych bloków PL/SQL.
- Jeśli wyjątek zgłoszony w podprogramie nie zostanie obsłużony w podprogramie Obsługa wyjątków sekcję, następnie zostanie przeniesiona do bloku wywołującego.
- Obydwa mogą mieć dowolną liczbę parametrów.
- Obydwa są traktowane jako obiekty bazy danych w PL/SQL.
Procedura vs. Funkcja: Kluczowe różnice
Procedura | Funkcjonować |
---|---|
Używane głównie do wykonania określonego procesu | Używany głównie do wykonywania niektórych obliczeń |
Nie można wywołać instrukcji SELECT | W instrukcji SELECT można wywołać funkcję, która nie zawiera żadnych instrukcji DML |
Użyj parametru OUT, aby zwrócić wartość | Użyj RETURN, aby zwrócić wartość |
Zwrócenie wartości nie jest obowiązkowe | Zwrócenie wartości jest obowiązkowe |
RETURN po prostu zakończy sterowanie z podprogramu. | RETURN spowoduje wyjście ze sterowania z podprogramu i zwrócenie wartości |
Typ danych zwrotnych nie zostanie określony w momencie tworzenia | Typ danych zwrotnych 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 typem danych daty. Tutaj zobaczymy często używane funkcje i ich zastosowanie.
Funkcje konwersji
Te wbudowane funkcje służą do konwersji jednego typu danych na inny typ danych.
Nazwa funkcji | Stosowanie | Przykład |
---|---|---|
TO_CHAR | Konwertuje inny typ danych na znakowy typ danych | TO_CHAR(123); |
TO_DATE (ciąg, format) | Konwertuje podany ciąg znaków na bieżąco. Ciąg powinien pasować do formatu. |
TO_DATE('2015 stycznia 15 r., 'RRRR-MON-DD'); Wydajność: 1 / 15 / 2015 |
TO_NUMBER (tekst, format) |
Konwertuje tekst na typ liczbowy o podanym formacie. Informat '9' oznacza liczbę cyfr |
Wybierz TO_NUMBER('1234′,'9999') z podwójnego;
Wydajność: 1234 Wybierz TO_NUMBER('1,234.45′,'9,999.99') z podwójnego; Wydajność: 1234 |
Funkcje łańcuchowe
Są to funkcje używane w typie danych znakowych.
Nazwa funkcji | Stosowanie | Przykład |
---|---|---|
INSTR(tekst, ciąg znaków, początek, wystąpienie) | Podaje pozycję określonego tekstu w podanym ciągu.
|
Wybierz INSTR('AEROPLANE','E',2,1) z dual
Wydajność: 2 Wybierz INSTR('AEROPLANE','E',2,2) z dual Wydajność: 9 (2nd wystąpienie E) |
SUBSTR (tekst, początek, długość) | Podaje wartość podciągu głównego cią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 niższą („AerOpLane”) z podwójnej;
Wydajność: samolot |
INITCAP (tekst) | Zwraca podany tekst zaczynający się od dużej litery. | Wybierz („guru99”) z trybu podwójnego
Wydajność: Guru99 Wybierz („moja historia”) z opcji podwójnej Wydajność: Moja historia |
DŁUGOŚĆ ( tekst ) | Zwraca długość podanego ciągu | Wybierz DŁUGOŚĆ („guru99”) z podwójnego;
Wydajność: 6 |
LPAD (tekst, długość, pad_char) | Dopełnia ciąg po lewej stronie o zadaną długość (całkowity ciąg) podanym znakiem | Wybierz LPAD('guru99', 10, '$') z dual;
Wydajność: $$$$guru99 |
RPAD (tekst, długość, pad_char) | Dopełnia ciąg po prawej stronie o podaną długość (całkowity ciąg) podanym znakiem | Wybierz RPAD('guru99′,10,'-') z dual
Wydajność: guru99—- |
LTRIM ( tekst ) | Przycina wiodący biały znak z tekstu | Wybierz LTRIM('Guru99') z dual;
Wydajność: Guru99 |
RTRIM ( tekst ) | Przycina końcowy biały znak z tekstu | Wybierz RTRIM('Guru99') z dual;
Wydajność; Guru99 |
Funkcje daty
Są to funkcje służące do manipulowania datami.
Nazwa funkcji | Stosowanie | Przykład |
---|---|---|
ADD_MONTHS (data, liczba miesięcy) | Dodaje do daty podane miesiące | ADD_MIESIĄC('2015-01-01',5);
Wydajność: 05 / 01 / 2015 |
SYSDATA | Zwraca bieżącą datę i godzinę serwera | Wybierz SYSDATE z dual;
Wydajność: 10, 4:2015:2 |
PIEŃ | Zaokrąglenie zmiennej daty do najniższej możliwej wartości | wybierz sysdate, TRUNC(sysdate) z dual;
Wydajność: 10 4:2015:2 12 |
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 |
MIESIĄCE_BETWEEN | Zwraca liczbę miesięcy pomiędzy dwiema datami | Wybierz MONTHS_BETWEEN (sysdate+60, sysdate) z dual
Wydajność: 2 |
Podsumowanie
W tym rozdziale dowiedzieliśmy się następujących rzeczy.
- Jak utworzyć procedurę i różne sposoby jej wywoływania
- Jak utworzyć funkcję i różne sposoby jej wywoływania
- Podobieństwa i różnice pomiędzy procedurą a funkcją
- Parametry i popularne terminologie RETURN w podprogramach PL/SQL
- Typowe wbudowane funkcje w Oracle PL / SQL