Podstawowy kurs Programowanie PL/pgSQL przeznaczony jest dla wszystkich, którzy znają język SQL i chcieliby rozpocząć pracę z PL/pgSQL.
PROGRAM
1. Wprowadzenie do PL/pgSQL
- Wyjaśnienie czym jest język proceduralny z przykładami
- W tym punkcie programu dowiesz się jakie są podstawowe cechy języków proceduralnych i dlaczego standardowy Strukturalny język zapytań (SQL) takim językiem nie jest.
- Do czego służy język PL/pgSQL
- Wprowadzenie opisowo i na przykładach pokazuje zastosowania i przypadki użycia języka PL/pgSQL
- Jak działa PL/pgSQL
- Zanim rozpoczniesz prace z PL/pgSQL musisz wiedzieć, jak język ten wpisuje się w architekturę serwera PostgreSQL. W tym punkcie uzyskasz komplet wymaganych informacji
- Środowisko PL/pgSQL
- Wprowadzenie do ekosystemu PL./pgSQL i narzędzi wspierających programowanie w tym języku
2.Język proceduralny PL/pgSQL
- Rodzaje bloków PL/pgSQL
- Pierwszym krokiem do poznania podstaw składni PL/pgSQL będzie zrozumienie, czym jest blok kodu i z jakimi rodzajami bloków mamy w PL/pgSQL do czynienia
- Struktura anonimowego bloku
- Bloki anonimowe są podstawowym rodzajem bloków w PL/pgSQL. Na tym etapie dowiesz się z czego składa się blok anonimowy i jak można go w PL/pgSQL utworzyć
- Komentarze
- W każdym języku programowania istnieje potrzeba opisywania kodu komentarzami, podobnie jest w PL/pgSQL. Tutaj dowiesz się jak definiować komentarze.
- Zmienne
- Jedną z zasadniczych cech języków programowania jest możliwość deklarowania, przypisywania i użytkowania zmiennych, dlatego w tym punkcie uzyskasz podstawowe informacje o zmiennych w PL/pgSQL
- Obsługa zmiennych
- Ciąg dalszy tematu zmiennych, w tym punkcie zapoznasz się z możliwościami wykorzystania zmiennych w PL/pgSQL
- Deklaracje
- W PL/pgSQL zmienne deklarowane są w odpowiednim miejscu bloku kodu - w tym miejscu uzyskasz informacje o tym w jaki sposób zmienne deklarować, jak również jak radzić sobie z niektórymi bardziej zaawansowanymi zagadnieniami związanymi z deklarowaniem zmiennych
- %TYPE
- W tym punkcie dowiesz się do czego służy konstrukcja %TYPE i jak jest ona związana z deklarowaniem zmiennych
- %ROWTYPE
- Kolejną konstrukcją często używaną w sekcji deklaracji jest %ROWTYPE. W tym miejscu poznasz zastosowania tej konstrukcji.
- Rekordy
- Dalsze zgłębianie zagadnień PL/pgSQL nie byłoby możliwe bez zrozumienia, czym są rekordy w PL/pgSQL
- Variable Scope
- Kolejnym zagadnieniem które zostanie poruszone jest widoczność zmiennych deklarowanych w tzw. blokach zagłębionych
- Użycie RAISE
- Następnym etapem nauki jest zapoznanie się z wyrażeniem RAISE, jego zastosowaniami i sposobem użycia
- Przypisywanie wartości
- Uzupełnieniem uzyskanych wiadomości dotyczących zmiennych będą aspekty związane z przypisywaniem do istniejących zmiennych nowych wartości
- Stosowanie SELECT w PL/pgSQL
- Język PL/pgSQL w naturalny sposób wspiera użycie w blokach lodu natywnych kwerend języka SQL. W ramach omówienia zagadnienia poznasz zasady o ograniczenia wykorzystania zapytań typu SELECT SQL w kodzie PL/pgSQL
- Wykorzystanie INSERT / UPDATE / DELETE
- W kolejnym punkcie zapoznasz się z zasadami i ograniczeniami wykorzystania zapytań typu INSERT / UPDATE / DELETE w kodzie PL/pgSQL
- Użycie PERFORM
- Zastosowanie wyrażenia PERFORM w kodzie PL/pgSQL
- Struktura bloków nazwanych
- Wprowadzenie do zagadnień związanych z blokami nazwanymi, czyli Procedurami i Funkcjami w PL/pgSQL
3. Funkcje PL/pgSQL
- Przykłady Funkcji
- Omówienie budowy Funkcji na przykładach
- Stosowanie $
- Rola znaczników delimitujących $ w definicji funkcji
- Parametry Funkcji
- Bloki nazwane pozwalają przekazać do/z kodu bloku wartości różnego typu zmiennych. W tym punkcie omówimy zagadnienia związane z parametrami funkcji
- Parametry domyślne
- Zasady przekazywania do funkcji parametrów ze zdefiniowanymi wartościami domyślnymi
- Asercje
- Sprawdzanie błędów logicznych i identyfikowanie problemów związanych z wykonywanym kodem przy użyciu instrukcji ASSERT
4. Struktury kontrolne PL/pgSQL
- Kontrola przepływu
- Ogólne omówienie struktur kontrolnych jako mechanizmu sterującego przepływem pracy w kodzie PL/pgSQL
- Instrukcja warunkowa IF
- Zagadnienia związane z zastosowaniem instrukcji warunkowej IF
- Zagnieżdżona instrukcja IF
- Zagnieżdżanie instrukcji IF
- Instrukcja warunkowa ELSIF
- Rozbudowa instrukcji IF o wyrażenie ELSIF
- Instrukcja wyboru CASE
- Omówienie zwykłej instrukcji CASE (przykład: CASE status WHEN 'Pending' THEN ... )
- Przeszukiwalna instrukcja CASE
- Omówienie kolejnej, tzw. przeszukiwalnej formy instrukcji CASE (przykład: CASE WHEN x BETWEEN 0 AND 10 THEN ... )
- SQLowa instrukcja CASE
- Struktura kontrolna CASE w kodzie zapytań SQL (SQL CASE)
- Klauzula FOUND
- Zastosowanie klauzuli (zmiennej globalnej) FOUND na potrzeby struktur kontrolnych PL/pgSQL
5. Pętle
- Pętla nieograniczona
- Zastosowanie podstawowej formy pętli w PL/pgSQL (tzw. Unconstrained Loop)
- WHILE Loop
- Struktura i zastosowanie pętli WHILE w PL/pgSQL
- FOR Loop
- Pętla iteracyjna FOR w PL/pgSQL
- FOREACH Loop
- Iterowanie po kolekcjach za pomocą pętli EOREACH
6. Dynamiczny SQL
- Ostrożności nigdy za wiele
- Omówienie dynamicznego SQL jako "antywzorca" programistycznego
- EXCUTE,
- Struktura i zastosowanie instrukcji EXECUTE w PL/pgSQL
- EXECUTE INTO
- Użycie instrukcji EXECUTE z modyfikatorem INTO na przykładach
- Execute Using
- Użycie instrukcji EXECUTE z modyfikatorem USING na przykładach
7. Kursory PL/pgSQL
- Kursory
- Wprowadzenie do tematyki Kursorów w kodzie PL/pgSQL
- Kursor FLOW
- Cykl życia Kursora w PL/pgSQL
- Deklarowanie kursorów
- Omówienie zasad deklarowania kursorów
- Metoda OPEN
- Użycie metody OPEN
- Fetching data
- Ładowanie i obsługa danych za pomocą kursora
- Pętle zagnieżdżone
- Omówienie możliwości zagnieżdżania Pętli w kodzie PL/pgSQL
8. Zwracanie danych w PL/pgSQL
- Zwrot wartości skalarnych
- Zwracanie danych z bloku kodu na przykładzie danych skalarnych
- Zwrot zestawu danych - SETS
- Wprowadzenie do SETów wraz z omówieniem zwracania zestawów danych z bloków PL/pgSQL
- Zwrot Rekordów
- Omówienie zasad zwracania Rekordów z kodu PL/pgSQL wraz z obsługą zwracanych wartości w blokach wywołujących
- Zwrot Zestawów Rekordów
- Rozwinięcie w/w tematyki w zakresie zwracania zestawów Rekordów
- Parametry OUT
- Parametry OUT i och zastosowanie w blokach nazwanych
- Ustrukturyzowane zestawy Rekordów
- Omówienie zagadnienia ustrukturyzowanych zestawów Rekordów
- Refcursors
- Zwracanie Referencji do Kursorów z bloków PL/pgSQL
9. Obsługa informacji Meta oraz wyjątków
- Informacje Meta
- Omówienie pojęcia metainfromacji w PL/pgSQL
- Wyjątki
- Wyjątki i zagadnienie obsługi wyjątków w kodzie PL/pgSQL
- Przykłady błędów w kodzie
- Najczęściej spotykane rodzaje wyjątków
- Informacje dotyczące wyjątków
- Uzyskiwanie dodatkowych informacji o przechwyconym wyjątku
- Propagowanie wyjątków
- Zasady propagowania wyjątków pomiędzy blokami kodu PL/pgSQL
10. Triggery PL/pgSQL
- Omówienie Triggerów
- Wprowadzenie do zagadnienia wyzwalaczy na przykładzie wybranych przypadków użycia
- Struktura Triggera
- Definiowanie Triggerów, w tym deklarowanie wyzwalacza i funkcji wyzwalacza w PL/pgSQL
- Funkcje Triggera
- Struktura, budowa i zastosowanie funkcji triggera
- Trigger Events
- Omówienie zdarzeń wyzwalających:
- Insert
- Update
- Delete
-Truncate
- Timing
- Omówienie zagadnień timingu w wyzwalaczach (BEFORE, AFTER, INSTEAD OF)
- Frequency
- Częstotliwość wykonywania wyzwalaczy
- Trigger Overhead
- Dyskusja na temat zagadnień wydajnościowych wprowadzanych przez triggery w PL/pgSQL
- Argumenty: NEW, OLD
- Omówienie roli i zastosowań argumentów NEW i OLD w triggerach, wartości NEW i OLD w zależności od zdarzeń wyzwalających i timingu.
- Pozostałe Argumenty dostępne dla funkcji wyzwalaczy
- Omówienie dodatkowych argumentów dostępnych z poziomu kodu funkcji wyzwalacza:
- TG_OP
- TG_NAME
- TG_WHEN
- TG_LEVEL
- TG_TABLE_NAME
- TG_RELNAME
- TG_RELID
- TG_TABLE_SCHEMA
- TG_NARGS
- TG_ARG[]
- Triggery - przypadki użycia
- Wybrane przypadki użycia triggerów wraz z przykładami
11. Event Triggery
- Ogólne omówienie zagadnienia Event Triggerów
12. PL/pgSQL Best Practices
- Omówienie najlepszych praktyk programistycznych w PL/pgSQL