Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,



Podobne dokumenty
Administracja i programowanie pod Microsoft SQL Server 2000

Paweł Rajba

Kursory. A. Pankowska 1

W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP).

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Oracle PL/SQL. Paweł Rajba.

Język PL/SQL. Rozdział 2. Kursory

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora

Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów

PODSTAWY BAZ DANYCH 13. PL/SQL

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

SQL 4 Structured Query Lenguage

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL;

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

Bloki anonimowe w PL/SQL

Deklarowanie kursora

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

1. ELEMENTY JĘZYKA PL/SQL

Comarch ERP XL Business Intelligence Start. Migracja do wersji 2018

Administracja i programowanie pod Microsoft SQL Server 2000

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Microsoft SQL Server Podstawy T-SQL

PL/SQL. Zaawansowane tematy PL/SQL

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

15. Funkcje i procedury składowane PL/SQL

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH

Bloki anonimowe w PL/SQL

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Ćwiczenia 2 IBM DB2 Data Studio

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

Oracle11g: Wprowadzenie do SQL

050 SQL ELEMENTY ZAAWANSOWANE. Prof. dr hab. Marek Wisła

Oracle PL/SQL. Paweł Rajba.

Procedury i funkcje składowane

Październik Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

Język PL/SQL Procedury i funkcje składowane

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Systemowe aspekty baz

Kursory - pobieranie danych z baz danych do programów PL/SQL

Bazy danych 6. Klucze obce. P. F. Góra

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków...

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Wykład 5. SQL praca z tabelami 2

Zarządzanie bazą danych. Bazy Danych i Systemy informacyjne Wykład 4. Piotr Syga

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Składowane procedury i funkcje

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Oracle PL/SQL. Paweł Rajba.

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Systemy GIS Tworzenie zapytań w bazach danych

Pakiety podprogramów Dynamiczny SQL

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Systemowe aspekty baz danych

Cele. Definiowanie wyzwalaczy

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Podstawy programowania skrót z wykładów:

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Elementy. języka SQL

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Plan wykładu BAZY DANYCH II WYKŁAD 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone

Programowanie obiektów

Administracja i programowanie pod Microsoft SQL Server 2000

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Zmiany funkcjonalne i lista obsłużonych zgłoszeń Comarch DMS , Comarch DMS i Comarch DMS

Wprowadzenie. Rozdział 23 PDO. Podstawowe kroki aplikacji. Źródło danych

Struktura bazy danych

Materiały do laboratorium MS ACCESS BASIC

BAZY DANYCH Cz III. Transakcje, Triggery

Przestrzenne bazy danych Podstawy języka SQL

Imię i Nazwisko Data Ocena. Laboratorium 7

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

LibreOffice Calc VBA

Bazy danych 11. SQL Procedury składowane, kursory i wyzwalacze

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń

Wyzwalacze (triggery) Przykład

Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL

Oracle PL/SQL. Paweł Rajba.

Bazy danych SQL Server 2005

Programowanie obiektowe

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

Wykład 8. SQL praca z tabelami 5

PL/SQL. Lidia Małkiewicz i Cezary Skubała

Transkrypt:

Programowanie w SQL definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE, kontynuacja działania od instrukcji za podaną etykietą GOTO etykieta, wyjście bezwarunkowe RETURN[n], ustawienie czasu wykonania instrukcji WAITFOR, użycie pętli WHILE z klauzulami BREAK, WHILE. 1

IF @test ELSE SELECT prawda SELECT fałsz Przykład Instrukcja warunkowa /* Utworzenie zmiennej lokalnej przechowującej pierwszą literę nazwy olejku*/ DECLARE @PierwszaLitera char(1) SELECT @PierwszaLitera = LEFT(Min(NazwaOlejku),1) FROM Olejki /* Wyświetlenie pierwszej litery*/ SELECT @PierwszaLitera /* Zastosowanie instrukcji IF...ELSE do sprawdzenia, czy pierwszą literą jest 'A'*/ IF @PierwszaLitera = 'A' PRINT 'Zgadza się, pierwszą literą jest A' ELSE PRINT 'Niestety, pierwszą literą nie jest A' 2

CASE W programie SQL Servre CASE jest funkcję (wyrażeniem) nie poleceniem. CASE wartość (wyrażenie) WHEN wyrażenie_1 THEN wyrażenie_wynikowe_1 WHEN wyrażenie_2 THEN wyrażenie_wynikowe_2... WHEN wyrażenie_n THEN wyrażenie_wynikowe_n [ELSE wyrażenie_wynikowe_else] END 3

CASE Wyrażenie CASE można stosować: w instrukcji SELECT, w klauzuli GROUP BY, w klauzuli ORDER By, w klauzuli SET polecenia UPDATE, w w liście wartości polecenia INSERT, w klauzuli WHERE poleceń SELECT, UPDATE, DELETE. 4

CASE Przykład SELECT NazwaOlejku, IdSkladnikaRosliny, CASE IDSkladnikaRosliny WHEN 1 THEN 'Orzechy i jagody' WHEN 2 THEN 'Owoc' WHEN 3 THEN 'Orzechy i jagody' WHEN 7 THEN 'Owoc' WHEN 8 THEN 'Orzechy i jagody' WHEN 14 THEN 'Orzechy i jagody' WHEN 12 THEN 'Owoc' WHEN 15 THEN 'Owoc' ELSE 'Pozostałe' END AS SkladnikUzytkowy FROM Olejki ORDER BY SkladnikUzytkowy 5

CASE Przykład SELECT TOP 10 NazwaOlejku, NazwaLacinska, CASE WHEN LEFT(NazwaOlejku,1) = 'B' THEN 'Nazwa na B' WHEN LEFT(NazwaLacinska, 1) = 'C' THEN 'Nazwa łacińska na C' ELSE 'Nazwa na inną literę' END AS WynikiTestu FROM Olejki ORDER BY NazwaOlejku 6

Funkcje spokrewnione z CASE Funkcje te należą do specyfikacji ANSI SQL-92: COALESCE, NULIF, ISNULL. COALESCE zwraca pierwszą niepustą (NOT NULL) wartość z listy wyrażeń. COALESCE (wyrażenie 1, wyrażenie 2,..., wyrażenie n ) równoważne z CASE... WHEN wyrażenie1 IS NOT NULL THEN wyrażenie1 WHEN wyrażenie2 IS NOT NULL THEN wyrażenie2 ELSE wyrażenien END 7

Funkcje spokrewnione z CASE NULLIF zwraca wartość NULL, jeżeli wyrażenie 1 =wyrażenie 2 NULLIF(wyrażenie 1,wyrażenie 2 ) równoważne z CASE WHEN wyrażenie1=wyrażenie2 THEN NULL ELSE wyrażenie1 END ISNULL przeciwieństwo funkcji NULLIF. ISNULL (wyrażenie 1,wyrażenie 2 ) równoważne z CASE WHEN wyrażenie1 IS NULL THEN wyrażenie 2 ELSE wyrażenie1 END 8

WHILE Pętla WHILE w najprostszej postaci zawiera wyrażenie logiczne oraz instrukcję lub blok instrukcji. Przykład --Użycie zmiennej lokalnej jako licznika DECLARE @licznik int SET @licznik = 1 WHILE @licznik < 11 BEGIN PRINT @licznik SET @licznik = @licznik + 1 END 9

WHILE...BREAK WHILE...CONTINUE Przykład --Użycie zmiennej lokalnej jako licznika DECLARE @licznik int SET @licznik = 1 WHILE @licznik < 25 BEGIN PRINT @licznik SET @licznik = @licznik + 1 IF @licznik >15 BREAK END 10

KURSORY deklaracja, otwieranie, zamykanie, zwolnienie kursora, polecenie FETCH pobranie wiersza do: zmiennej, według pozycji bezwzględnej, według pozycji względnej, 11

Kursory Typy kursorów: języka T-SQL tworzone za pomocą polecenia DECLARE CURSOR, kursory API tworzone za pomocą bibliotek ADO (ActiveX Date Object, OLE DB, ODBC lub DB-Library. Klasyfikacja kursorów obsługiwanych przez T-SQL wg właściwości: zdolności do odzwierciedlenia danych źródłowych czułość kursora (ang. cursor sensitivity), kierunku przemieszczania się w zestawie wierszy (w przód i tył, tylko w przód), zdolności do aktualizacji zestawu wierszy. Typy kursorów obsługiwane przez T-SQL: statyczne, kluczowe, dynamiczne, błyskawiczne. 12

Kursory Kursor statyczny tylko do odczytu, jedno lub dwu kierunkowy. Kursor kluczowy do odczytu lub od odczytu i aktualizacji, jedno lub dwu kierunkowe. Przy zmianie wartość uwzględniane są tylko zmiany dokonane przez kursor. Kursor dynamiczny odzwierciedla zmiany zarówno w ilościach elementów, jak i wartościach danych niezależnie czy zostały one dokonane przez ten kursor, czy przez innego użytkownika. Ograniczenie - instrukcja SELECT użyta do zdefiniowania kursora może zawierać klauzulę SELECT tylko wtedy, gdy istnieje indeks kolumn zastosowanych w tej klauzuli. Kursor błyskawiczny nieprzewijalny, tylko do odczytu. 13

Kursory - tworzenie DECLARE nazwa_kursora CURSOR [widoczność LOCAL/GLOBAL] [przewijanie- FORWARD_ONLY/SCROLL] [typ - STATIC/KEYSET/DYNAMIC/FAST_FORWARD] [blokada READ_ONLY/SCROLL_LOCK/OPTIMISTIC] [TYPE_WARNING] FOR instrukcja_selekcji [FOR UPDATE[OF nazwa-kolumny]] 14

Parametr FORWARD_ONLY przodu. Kursory tworzy kursor przewijany tylko do Parametr typu FORWARD_ONLY i FAST_FORWARD wykluczają się wzajemnie. Parametr READ_ONLY powoduje, że kursor nie może modyfikować danych źródłowych, chociaż mogą to robić inni użytkownicy. Parametr SCROLL_LOCKS powoduje, że dane źródłowe będą mogły być aktualizowane tylko przez kursor. Każda inna instrukcja UPDATE wykonywana nawet przez innego użytkownika zakończy się niepowodzeniem. Parametr OPTIMISTIC pozwala na aktualizację wierszy zarówno przez kursor jak i innych użytkowników. 15

Kursory Parametr TYPE_WARING powoduje, że SQL Server ostrzega przy konwersji na inny typ kursora. Klauzula FOR (wymagana) określa wiersze oraz kolumny znajdujące się w zestawie kursora. Parametr FOR UPDATE z opcją OF pozwala określić kolumny w których dopuszczalna będzie modyfikacja. 16

Otwieranie, zamykanie, zwalniane kursora Zestaw kursora zostaje utworzony dopiero w momencie jego otwarcia. Składnia instrukcji OPEN [GLOBAL] nazwa_kursora_lub_zmiennej Parametr GLOBAL pozwala uniknąć konfliktu nazw, gdy kursor lokalny i globalny maja taką samą nazwę. Polecenie CLOSE zwalnia zasoby sytemu używane do obsługi zestawu kursora oraz zwalnia ewentualne blokady nałożone na wiersze. CLOSE [GLOBAL] nazwa_kursora_lub_zmiennej DEALLOCATE[GLOBAL] nazwa_kursora_lub_zmiennej jest to ostatnie polecenie jakie należy wykonać w celu usunięcia kursora. 17

FETCH Polecenie FETCH pobiera wiersze z kursora zgodnie z podanym kierunkiem. FETCH [selektor_wiersza FROM] nazwa_kursora [INTO @zm1, @zm2,...] Funkcja @@FETCH_STATUT zwraca 0 po pomyślnym pobraniu kursora. Selektory wiersza dla kursorów przemijalnych: NEXT (następny), PRIOR (poprzedni), FIRST (pierwszy), LAST( ostatni), ABSOLUTE n (skok bezwzględny do n), RELATIVE n (skok względny o n). Uwaga dla kursora dynamicznego nie można wykonać operacji FETCH ABSOLUTE. Przy pominięciu selektora wiersza domyślnie pobierany jest następny wiersz. 18

Najczęściej wykonywanym poleceniem jest FETCH Najczęściej wykonywanym poleceniem jest FETCH NEXT z połączeniu z pętlą WHILE, dopóki funkcja NEXT z połączeniu z pętlą WHILE, dopóki funkcja @@FETCH_STATUS zwraca wartość 0, lub różną od @@FETCH_STATUS zwraca wartość 0, lub różną od 1. Pamiętaj, że pierwszą instrukcję należy wykonać 1. Pamiętaj, że pierwszą instrukcję należy wykonać przed rozpoczęciem pętli i sprawdzeniem stanu funkcji przed rozpoczęciem pętli i sprawdzeniem stanu funkcji @@FETCH_STATUS. @@FETCH_STATUS. FETCH RELATIVE n zwraca n ty wiersz wzglądem ostatniej operacji pobrania. Może być wykonywane ze znakiem minus. Uwaga Po otwarciu kursora, jego bieżąca pozycja znajduje się logicznie przed pierwszym wierszem. Przy pierwszej operacji pobrania, wykonywanej zaraz po poleceniu OPEN obwiązuje: FETCH NEXT równoważne FETCH FIRST, FETCH PRIOR nie zwraca żadnego wiersza, FETCH RELATIVE+n równoznaczne ABSOLUTE n, FETCH RELATIVE n nie zwraca żadnego wiersza. Klauzula INTO pozwala na przepisanie danych z każdego atrybutu na liście polecenia SELECT określonym zmiennym lokalnym. 19

UPADTE, DELETE UPDATE nazwa_tabeli SET lista_przypisań WHERE CURRENT OF nazwa_kursora Modyfikuje wiersz relacji będący bieżącym wierszem kursora, jest to operacja modyfikacji pozycjonowanej. DELETE FROM nazwa_tabeli WHERE CURRENT OF nazwa_kursora Usuwa z określonej relacji wiersz odpowiadający bieżącej pozycji kursora, jest to operacja usuwania pozycjonowanego. 20

Praca z kursorem 1. Zadeklarować kursor i określić instrukcją SELECT zestaw wynikowy, na którym operuje kursor. 2. Otworzyć kursor. ( jest to wykonanie polecenia DECLARE z kroku pierwszego). 3. Pobrać wiersze do kursora. 4. Zmodyfikować lub usunąć wiersze w tabeli. 5. Zamknąć kursor. 6. Zwolnić kursor, aby usunąć istniejące odwołania. 21

Zmienne kursorowe DECLARE @nazwa_zmiennej CURSOR SET @nazwa_zmiennej (przypisanie wartości). Składnia typu DECLARE Kursor CORSOR LOCAL FAST_FORWARD FOR SELECT nazwaolejku FROM olejki DECLARE @zmiennakursora CURSOR SET @zmiennakursora = Kursor 22

@@FETCH_STATUS Funkcja zwraca status ostatniej operacji pobrania wiersz z kursora. 0 polecenie zostało pomyślnie zakończone -1 nie ma dalszych wiersz (polecenie zakończyło się błędem) -2 - żądanych wiersz nie istnieje (nie pobrano żadnego wiersza) np. został usunięty z tabeli bazowej. 23