O co chodzi z tym PL/SQL?
PL/SQL to proceduralny język programowania ściśle związany z bazami danych Oracle. Korzystanie z niego daje nam wiele nowych możliwości:
- możemy przechwytywać i obsługiwać wyjątki
- możemy korzystać z pętli i bardzo rozbudowanych instrukcji warunkowych
- możemy np. sięgać do plików na dysku, pobierać dane ze stron internetowych
- możemy poprawić wydajność naszych działań na bazie danych
- możemy realizować zadania które ze znajomością samego SQL nie byłyby możliwe - np. stworzyć rozbudowany program który wykona wiele następujących po sobie czynności.
Rodzaje bloków PL/SQL
W PL/SQL możemy tworzyc bloki jako :
- bloki anonimowe
- procedury
- funkcje
- wyzwalacze
W tym rozdziale sposób ich tworzenia oraz użycia jest przedstawiony bardzo zdawkowo. Napisałem taki opis tylko w celach poglądowych. Sporo więcej o tym będzie w następnych rozdziałach, na razie drogi czytelniku musisz się dowiedzieć o co w ogóle "kaman" w tym całym PL/SQL :)
Bloki anonimowe
Bloki anonimowe nie posiadają nazwy. Można je stworzyć w celu jednorazowego wykonania kodu, jednak taki blok w przeciwieństwie do procedur, funkcji lub wyzwalaczy nie będzie przechowywany w bazie danych.Najprostsza postać bloku anonimowego przestawiona jest na poniższym zdjęciu. Blok zaczyna się od słowa „begin” a kończy na „end”. Jeśli w takim bloku nie wykonujemy żadnych operacji, musimy wstawić przynajmniej słówko „null” ze średnikiem, lub zamiast tego „commit”. W tym drugim przypadku będzie to jednak miało wpływ na transakcje.
Procedury
Są to podobnie jak funkcje i wyzwalacze bloki PL/SQL posiadające nazwę. Procedury są przechowywane w bazie danych zarówno w postaci skompilowanej, jak i kodu.
Na poniższej ilustracji widać najprostszą formę procedury. Zasadniczo do konstrukcji bloku anonimowego dodajemy linijkę
„CREATE OR REPLACE PROCEDURE NAZWANA IS”
Klauzuli „OR REPLACE” tak naprawdę nie jesteśmy zobowiązani stosować, chroni nas ona jednak przed błędem w przypadku gdyby procedura o takiej nazwie już istniała w naszych schemacie bazodanowym. Dodając „OR REPLACE”, w przypadku gdyby taka procedura ( posiadająca taką nazwę i ilość oraz typ parametrów jeśli takie występują ) już istniała, zostanie nadpisana nową, właśnie kompilowaną. Poniżej przedstawiam efekt próby stworzenia procedury o zajętej już nazwie bez klauzuli „OR REPLACE” :
Kasowanie procedur odbywa się poprzez zastosowanie poniższej konstrukcji:
DROP PROCEDURE NAZWA_PROCEDURY;
z poziomu SQL. Z poziomu programów PL/SQL (bez użycia dynamicznego SQL )nie możemy kasować innych programów.
Funkcje
Funkcje są również nazwanymi blokami PL/SQL. Funkcje MUSZĄ zwracać wynik, w przeciwieństwie do procedur. Tak jak procedury i wyzwalacze są przechowywane na serwerze jako kod oraz w postaci skompilowanej. Poniżej przedstawiam przykład prostej funkcji funkcji. Po „CREATE OR REPLACE FUNCTION NAZWA_FUNKCJI” następuje deklaracja typu zwracanej wartości.
Powyższa funkcja tylko i wyłącznie zwraca słowo „test”. Możemy się do niej odwołać aby uzyskać wynik:
Wykonałem zapytanie SQL odwołujące się do nowo stworzonej funkcji. Aby to wykonać musiałem skorzystać z pseudo tabeli DUAL zawierającej jeden wiersz i jedną kolumnę. Tabela ta służy m.in. do tego typu działań i nie zawiera żadnych danych. Jak widać powyżej, w wyniku działania zapytania została mi zwrócona zadeklarowana w funkcji wartość.
Kasowanie funkcji odbywa się poprzez zastosowanie poniższej konstrukcji:
DROP FUNCTION NAZWA_FUNKCJI;
z poziomu SQL. Z poziomu programów PL/SQL nie możemy kasować innych programów.
Wyzwalacze
Wyzwalacze są blokami PL/SQL wykonywanymi jako reakcja na określone zdarzenie w bazie danych.
Powyższy trigger (wyzwalacz) zadziała przed wrzuceniem danych do tabeli „departments”. Wyzwalacz nie wykona żadnych czynności, zostanie jedynie wywołany.
Kasowanie wyzwalaczy odbywa się poprzez zastosowanie poniższej konstrukcji:
DROP TRIGGER NAZWA_FUNKCJI;
z poziomu SQL. Z poziomu programów PL/SQL nie możemy kasować innych programów.
Wywoływanie procedur i funkcji
Procedury i funkcje wywołujemy w różny sposób. O ile procedurę wywołujemy w kodzie innej procedury pl/sql (lub bloku anonimowego) :
o tyle nie możemy jej wywołać w zapytaniu SQL.
Funkcje wywołać można przy pomocy zapytania SQL:
Funkcja musi zwracać jakąś wartość. Dzięki temu jesteśmy w stanie wypisać wynik jej działania na ekranie, lub go przetworzyć.
Funkcje możemy również wywoływać wewnątrz innych bloków PL/SQL pod warunkiem jednak, że jej wynik zostanie przypisany do zmiennej:
Nie możemy wywoływać funkcji w taki sposób jak procedur. Otrzymamy błąd :
Ten temat omawiam na poniższych szkoleniach:
• Programowanie w PL/SQL
• Podstawy SQL i PL/SQL
Możesz w nich uczestniczyć, a jako czytelnik tego bloga otrzymasz 10% zniżki - poinformuj o tym fakcie konsultanta.
zapowiada się ciekawie :)
OdpowiedzUsuńdziekuje :-)
OdpowiedzUsuńSuper! Najlepszy kurs pl/sql jaki znam
OdpowiedzUsuńOR REPLACE nie dodane chroni nas też przed błędem, i to poważnym, nie nadpisanie już istniejącej i potrzebnej procedury, funkcji, pakietu, bo później ciężko odzyskać nadpisany kod
OdpowiedzUsuńJuż kiedyś miałem taki problem (odzyskanie pakietu z bay nie wchodziło w rachubę), pozostało jedynie przywracać cały schemat z kopii bazy
Usuń