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

Wielkość: px
Rozpocząć pokaz od strony:

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

Transkrypt

1 Kursory Każde zapytanie SQL umieszczone w programie PLSQL jest wykonywane w tzw. obszarze roboczym lub inaczej obszarze kontekstu. PLSQL wykorzystuje ten obszar do przechowywania danych otrzymanych w wyniku zapytania oraz do przechowywania dodatkowych informacji dotyczących stanu wykonywanego zapytania, tzw. atrybutów. Kursor (ang. cursor) jest konstruktorem PLSQL umożliwiającym: nadanie nazwy temu obszarowi, dostęp do niego, pobranie z niego danych, kontrolę procesu przetwarzania danych. Wyróżniamy dwa rodzaje kursorów: jawne (ang. explicit) - stosowane w zapytaniach wyznaczających wiele krotek i w tzw. pętlach z kursorem (ang. Cursor For Loop), niejawne (ang. implicit) - stosowane w pozostałych poleceniach SQL (tj., insert, update, delete) i poleceniu select wyznaczającym jedną krotkę. Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL; Jeśli w klauzuli WHERE w deklaracji kursora występują odwołania do zmiennych PLSQL (o takich zmiennych mówimy, że są zmiennymi dowiązanymi), to zmienne te muszą być widoczne w miejscu deklaracji kursora, czyli muszą być zadeklarowane przed deklaracją kursora.

2 Kursory jawne Przed użyciem kursora jawnego należy go najpierw zadeklarować poleceniem declare: Przykład 1 declare * deklaracja kursora * cursor osoba_kursor is select nazwisko, nazwa from pracownik, zespol where pracownik.id_zesp = zespol.id_zesp and zespol.nazwa = 'BAZY DANYCH'; Otwarcie kursora open nazwa_kursora; Po otwarciu kursora następuje: Sprawdzenie wartości zmiennych dowiązanych, Określenie zbioru wyników na podstawie wartości zmiennych dowiązanych, Ustawienie wskaźnika zbioru wynikowego na pierwszym wierszu. Przykład 2 declare n zespol.nazwa%type; cursor osoba_kursor is select nazwisko, nazwa from pracownik, zespol where pracownik.id_zesp = zespol.id_zesp and zespol.nazwa = n; begin n = 'BAZY DANYCH'; open osoba_kursor;......

3 W momencie otwarcia kursora zmienna n ma wartość 'BAZY DANYCH' i ta wartość zostaje użyta w zapytaniu. Zmiana wartości zmiennej po wykonaniu instrukcji OPEN nie zmieni zbioru wynikowego zapytania. To zjawisko nazywamy spójnością odczytu. Aby w zapytaniu uwzględniona została nowa wartość zmiennej należy kursor zamknąć i ponownie go otworzyć. Zbiór wynikowy lub zbiór wierszy jest określany w momencie otwierania kursora. Wówczas ustalany jest również wskaźnik pokazujący wiersz, który ma być pobrany przez kursor jako następny. UWAGA: Nie można otworzyć wcześniej otwartego kursora. Pobranie danych z kursora lub fetch nazwa_kursora into lista_zmiennych; fetch nazwa_kursora into rekord_plsql; UWAGA: lista_zmiennych oraz pola rekordu muszą być zgodne pod względem typu z listą wyboru zapytania. Przykład 3 declare cursor pracownik_kursor is select nazwisko, placa_pod, id_zesp from pracownik; osoba_nazwisko pracownik.nazwisko%type; osoba_płaca pracownik.placa_pod%type; osoba_id_zesp pracownik.id_zesp%type; pracownik_dane pracownik_kursor%rowtype; begin open pracownik_kursor; fetch pracownik_kursor into osoba_nazwisko, osoba_płaca, osoba_id_zesp; fetch pracownik_kursor into pracownik_dane;

4 Polecenie fetch pobiera pojedynczy wiersz, a wskaźnik zbioru wynikowego zwiększa wartość odpowiednio dla następnego wiersza. W celu pobrania większej liczby wierszy jest konieczne wielokrotne użycie polecenia fetch (np. w pętli). Zamknięcie kursora close nazwa_kursora; Po pobraniu wszystkich wierszy ze zbioru wynikowego należy zamknąć kursor. Do mechanizmu PLSQL wysyłane są informacje, że przetwarzanie kursora zakończyło się i zasoby z tym związane (pamięć przydzielona dla zbioru wynikowego oraz tymczasowa przestrzeń wykorzystywana do wyznaczania tego zbioru) mogą być zwolnione. UWAGA: Nieprawidłowe jest zamykanie zamkniętego już kursora. Przykład 4 declare cursor pracownik_kursor is select nazwisko, placa_pod, id_zesp from pracownik; osoba_nazwisko pracownik.nazwisko%type; osoba_płaca pracownik.placa_pod%type; osoba_id_zesp pracownik.id_zesp%type; pracownik_dane pracownik_kursor%rowtype; begin open pracownik_kursor; fetch pracownik_kursor into osoba_nazwisko, osoba_płaca, osoba_id_zesp; fetch pracownik_kursor into pracownik_dane; close pracownik_kursor; end;

5 Do kursora można przekazać parametry, jego deklaracja jest wtedy następująca: declare cursor nazwa_kursora (param_1 typ_1,..., param_n typ_n) is param_1 typ_1,..., param_n typ_n oznaczają parametry kursora oraz ich typy. Typy parametrów są takie same jak typy zmiennych. Przykład 5 -- Deklarujemy kursor z dwoma parametrami CURSOR osoba (n pracownik.nazwisko%type, e pracownik.etat%type) IS SELECT nazwisko, etat FROM pracownik p WHERE UPPER(p.nazwisko)= UPPER(n) AND UPPER(p.etat) = UPPER(e) ORDER BY 1 DESC; zm_osoba osoba%rowtype; BEGIN -- Otwarcie kursora. Wielkość liter w łańcuchu bez znaczenia. OPEN osoba('maleja','adiunkt'); LOOP FETCH osoba INTO zm_osoba; EXIT WHEN osoba%notfound; DBMS_OUTPUT.PUT_LINE (osoba%rowcount '. ' zm_osoba.nazwisko ' ' zm_osoba.etat); END LOOP; CLOSE osoba; END;

6 Z każdym kursorem są związane cztery atrybuty, w których jest przechowywana informacja o przebiegu operacji wykonywanych przez kursor. %NOTFOUND: przyjmuje wartość true jeśli ostatnie polecenie fetch nie wyznaczyło krotki spełniającej warunek selekcji; w przeciwnym przypadku przyjmuje wartość false. W poniższym przykładzie, jeśli kursor nie wyznaczy krotki, atrybut osoba_kursor%notfound przyjmie wartość true i nastąpi wyjście z pętli. loop fetch osoba_kursor into osoba_nazwisko, osoba_nazwa; exit when osoba_kursor%notfound; end loop; %FOUND: przyjmuje wartość true jeśli ostatnie polecenie fetch wyznaczyło krotkę spełniającą warunek selekcji; w przeciwnym przypadku przyjmuje wartość false; %ROWCOUNT: wyznacza liczbę krotek pobranych poleceniem fetch; loop fetch osoba_kursor into osoba_nazwisko, osoba_nazwa; if osoba_kursor%rowcount > 10 then * odczytano ponad 10 krotek * end loop; %ISOPEN: przyjmuje wartość true jeśli kursor jest otwarty, w przeciwnym przypadku przyjmuje wartość false: if osoba_kursor%isopen then * pobierz krotkę * fetch osoba_kursor into osoba_nazwisko, osoba_nazwa; else *otwórz kursor * open osoba_kursor; end if;

7 Przykład 6 Kursor jawny pobieranie danych z więcej niż jednego wiersza w pętli FOR. CURSOR c_emp IS SELECT * FROM zespol ORDER BY nazwa; BEGIN FOR uv_emp IN c_emp LOOP DBMS_OUTPUT.PUT_LINE(uv_emp.id_zesp ' ' uv_emp.nazwa ' ' uv_emp.adres); END LOOP; END; Komentarz: Zmienna użyta w pętli FOR nie musi być zadeklarowana. PLSQL niejawnie deklaruje zmienną, której zasięg jest ograniczony do instrukcji pętli. Można więc pominąć jawne deklarowanie zmiennej rekordowej. Można też POMINĄĆ instrukcje OPEN, CLOSE i FETCH. Przykład 7 Kursor jawny pomijanie deklaracji kursora. BEGIN FOR uv_emp IN ( SELECT * FROM zespol ORDER BY nazwa) LOOP DBMS_OUTPUT.PUT_LINE(uv_emp.id_zesp ' ' uv_emp.nazwa ' ' uv_emp.adres); END LOOP; END;

8 Komentarz: W tej konstrukcji można pominąć deklarację kursora oraz instrukcje OPEN, FETCH i CLOSE. UWAGA: Zwięzłość kodu nie zawsze jest pożądana. Przykładowo nie można ponownie wykorzystywać kursora. Czasami lepiej mieć wszystkie instrukcje SELECT w sekcji przy dłuższych programach ułatwia to jego analizowanie. Zad.1 Zdefiniować kursor, który zawierać będzie nazwę etatu, nazwę zespołu oraz nazwisko pracowników zatrudnionych po dacie zatrudnienia pracownika o nazwisku LECH. Do wypisania zawartości kursora użyć instrukcji OPEN, FETCH i CLOSE. Zad.2 Zdefiniować kursor, który zawierać będzie roczną średnią płacę pracowników w poszczególnych grupach etatowych. Wypisać komunikaty DUZO jeśli kwota odczytana z kursora jest większa od lub MALO w przeciwnym przypadku. (Użyj pętli FOR.) Zad.3 Zdefiniuj kursor zawierający numery tych pracowników, których nazwiska zawierają na dowolnym miejscu literę podaną jako parametr kursora, wyniki uporządkuj rosnąco. Zastosuj pętlę FOR do wypisania informacji na ekranie. Parametrem kursora ma być litera podana przez użytkownika. Zad.4 Napisz blok, w którym: zdefiniuj kursor zawierający niepowtarzające się etaty, na których zatrudnieni są pracownicy pracujący w zespole o nazwie podanej przez użytkownika; wypisz na ekranie sumę płac podstawowych pracowników zatrudnionych na etatach występujących w kursorze; W przypadku gdy kursor jest pusty, wypisz komunikat ZESPOL NIE ZATRUDNIA PRACOWNIKOW. Zastosuj pętlę FOR.

9 Zad.5 Zdefiniuj blok, w którym: zdefiniuj kursor k1 zawierający nie powtarzającą się datę zatrudnienia najmłodszego pracownika na etacie podanym jako parametr przez użytkownika; zdefiniuj kursor k2 zawierający numery pracowników mających datę zatrudnienia późniejszą od daty podanej jako parametr. wypisz na ekranie zawartość kursora k2 dla daty znajdującej się w kursorze k1. (Wykorzystaj polecenia OPEN-FETCH-CLOSE.) Kursory niejawne nie są deklarowane przez programistę, polecenia open, fetch, close są wykonywane niejawnie przez system, atrybuty przechowujące informacje o przebiegu wykonywanych operacji: SQL%NOTFOUND, SQL%FOUND, SQL%ROWCOUNT, SQL%ISOPEN. Ich znaczenie jest takie samo, jak odpowiednich atrybutów kursora jawnego. Na przykład, wynik usunięcia pracownika o nazwisku Mały może być sprawdzony przez atrybut kursora niejawnego SQL%NOTFOUND w następujący sposób: delete from pracownik where nazwisko like 'Maleja'; if SQL%NOTFOUND then... * nie ma osoby o takim nazwisku * SQL%ROWCOUNT - wyznacza liczbę krotek, na których wykonano ostatnie polecenie insert, update, delete, np. update pracownicy set placa_pod = placa_pod * 1.2 where id_zesp = 10; if SQL%ROWCOUNT > 10 then... * uaktualniono więcej niż 10 wierszy * elsif SQL%ROWCOUNT = 0 then... * żaden wiersz nie spełnia warunku instrukcji update można np. wstawić nowy wiersz* end if;

10 SZBD automatycznie zamyka niejawny kursor po wykonaniu polecenia, co oznacza, że wartością atrybutu SQL%ISOPEN jest zawsze false. Przykład 8 Kursor niejawny pobieranie danych z jednego wiersza. uv_nazwisko VARCHAR2(25); uv_etat VARCHAR2(25); BEGIN SELECT nazwisko, etat INTO uv_nazwisko, uv_etat FROM pracownik WHERE numer = 1100; DBMS_OUTPUT.PUT_LINE('nazwisko: ' uv_nazwisko ', etat: ' uv_etat); END; Przykład 9 uv_nazwisko pracownik.nazwisko%type; BEGIN END; uv_etat pracownik.etat%type; SELECT nazwisko, etat INTO uv_nazwisko, uv_etat FROM pracownik WHERE numer = 1100; DBMS_OUTPUT.PUT_LINE('nazwisko: ' uv_nazwisko ', etat: ' uv_etat);

11 Przykład 10 uv_nazwisko pracownik.nazwisko%type; BEGIN uv_etat pracownik.etat%type; ile PLS_INTEGER; SELECT nazwisko, etat INTO uv_nazwisko, uv_etat FROM pracownik WHERE numer = 1100; DBMS_OUTPUT.PUT_LINE('nazwisko: ' uv_nazwisko ', etat: ' uv_etat); EXCEPTION * występuje tylko dla instrukcji SELECT * WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Zapytanie nie zwrocilo danych.'); WHEN TOO_MANY_ROWS THEN SELECT COUNT(*) INTO ile FROM pracownik WHERE numer = 1100; DBMS_OUTPUT.PUT_LINE('Zapytanie zwrocilo ' ile ' rekordow.'); END; Kursory z klauzulą FOR UPDATE instrukcji SELECT W celu modyfikowania wierszy pobieranych przez kursor język PLSQL dostarcza klauzuli FOR UPDATE w deklaracji kursora oraz klauzuli WHERE CURRENT OF w instrukcji UPDATE lub DELETE. Klauzula FOR UPDATE występuje jako ostatnia (za ORDER BY) klauzula w poleceniu SELECT.

12 SELECT FROM FOR UPDATE [OF odnosnik_do_kolumny] [NOWAIT], gdzie odnosnik_do_kolumny jest kolumną tabeli, na której jest wykonywane zapytanie. Może to być również lista kolumn. Przykład Ten kursor wylistuje dwie kolumny dla klauzuli UPDATE CURSOR wszyscy_pracownicy IS SELECT * FROM pracownik FOR UPDATE OF nazwisko, placa_podst; - - Ten kursor nie wylistuje żadnej kolumny CURSOR duza_placa IS SELECT numer, placa_podst FROM pracownik WHERE placa_podst > 2500 FOR UPDATE; Zmienne kursora Przestawione powyżej przykłady kursorów jawnych są przykładami kursorów statycznych - kursor jest związany z jedną instrukcją SQL i ta instrukcja jest znana w momencie kompilacji bloku. Zmienna kursora może być skojarzona z różnymi instrukcjami w czasie wykonywania kodu. Przed użyciem zmienna kursora musi być zadeklarowana. W czasie wykonania dla zmiennej kursora musi być przydzielona pamięć (typ FER). Następnie kursor jest otwierany, są z niego pobierane dane i jest zamykany (podobnie jak miało to miejsce z kursorem statycznym). Zmienne kursora są najczęściej wykorzystywane wewnątrz procedur składowanych, które zwracają zmienne do programu działającego po stronie klienta.

13 Zmienna kursora jest typem odwołania (jak wskaźniki w C). Może określać różne miejsca pamięci w czasie wykonywania programu. Deklaracja typu odwołania: REF typ, gdzie typ jest uprzednio zdefiniowanym typem. Słowo kluczowe REF wskazuje, że nowy typ będzie wskaźnikiem do zdefiniowanego typu. TYPE nazwa_typu IS REF CURSOR RETURN typ_rekordu; gdzie nazwa_typu jest nazwą nowego typu odwołania, a typ_rekordu jest typem rekordu wskazującego typy z listy wyboru, które będą ewentualnie zwrócone przez zmienną kursora. Zwracany typ zmiennej kursora musi być typem rekordu zadeklarowanym jawnie jako rekord zdefiniowany przez użytkownika lub niejawnie %ROWTYPE. Przykład 12 TYPE t_pracownik IS REF CURSOR RETURN pracownik%rowtype; TYPE t_rekord IS RECORD ( numer pracownik.numer%type, nazwisko pracownik.nazwisko%type ); zm_t_rekord t_rekord; TYPE t_numer_nazwisko IS REF CURSOR RETURN t_rekord; TYPE t_numer_nazwisko_2 IS REF CURSOR RETURN zm_t_rekord%type; zm_t_pracownik t_pracownik; zm_t_numer_nazwisko t_numer_nazwisko; Przykład 12 zawiera ograniczone zmienne kursora deklarowane tylko dla określonego typu zwracanych informacji. W deklaracji nieograniczonych zmiennych kursora nie ma klauzuli RETURN. Stąd mogą być otwarte dla dowolnego zapytania.

14 Przykład 13 TYPE t_pracownik IS REF CURSOR; zm_t_pracownik t_pracownik; Otwieranie zmiennej kursora dla zapytania OPEN zmienna_kursora FOR instrukcja_wyboru; UWAGA: Jeżeli zmienna kursora jest ograniczona, to lista wyboru musi odpowiadać typowi wyniku kursora. W zapytaniu sprawdzane są zmienne dowiązane i określany jest zbiór wynikowy. Z otwartej zmiennej kursora można pobierać dane instrukcją FETCH, a następnie zmienną kursową można zamknąć. Zamykanie zmiennej kursora CLOSE zmienna_kursora; Instrukcja CLOSE zwalnia zasoby użyte dla zapytania, ale niekoniecznie zwalnia obszar pamięci dla samej zmiennej kursora. Obszar pamięci zmiennej zwalniany jest wtedy, kiedy zmienna wychodzi poza zakres. Zamykanie kursora lub zmiennej kursora, które są już zamknięte, jest nieprawidłowe.

15 Przykład 14 TYPE t_pracownik IS REF CURSOR; zm_t_pracownik t_pracownik; zm_numer pracownik.numer%type; zm_nazwisko pracownik.nazwisko%type; BEGIN OPEN zm_t_pracownik FOR SELECT numer, nazwisko FROM pracownik; LOOP FETCH zm_t_pracownik INTO zm_numer, zm_nazwisko; EXIT WHEN zm_t_pracownik%notfound; DBMS_OUTPUT.PUT_LINE(zm_t_pracownik%ROWCOUNT ' ' zm_numer ' ' zm_nazwisko); END LOOP; CLOSE zm_t_pracownik; END; UWAGI: Zmienne kursora nie mogą być deklarowane w pakiecie; można w nim deklarować tylko typy. Zdalne procedury nie mogą zwracać wartości zmiennej kursora. Zmienne kursora mogą być przekazywane pomiędzy mechanizmem PLSQL po stronie klienta oraz po stronie serwera, ale nie pomiędzy dwoma serwerami. Kolekcje języka PLSQL (tabele indeksowe, tabele zagnieżdżone oraz tablice VARRAY) nie mogą zawierać zmiennej kursora. Podobnie tabele bazy danych i perspektywy nie mogą zawierać kolumn typu REF CURSOR. Można natomiast zdefiniować tablicę zmiennych kursora po stronie klienta.

16 Nie można używać zmiennych kursora z dynamicznym SQL w programie Pro*C. Zapytanie skojarzone ze zmienną kursora w instrukcji OPEN FOR nie może wykorzystywać klauzuli FOR UPDATE. Ograniczenie zniesione od wersji Oracle8i. Wyjątek (ang. exception) jest szczególnym zdarzeniem, które może zajść w trakcie wykonywania programu, np. dzielenie przez zero; może być obsłużony przez związaną z nim procedurę nazywaną procedurą obsługi wyjątku (ang. exception handling); w każdym programie mogą zostać wywołane dwa rodzaje wyjątków: predefiniowane, wywoływane niejawnie przez system w trakcie działania programu lub wywoływane jawnie przez programistę; definiowane przez użytkownika, wywoływane jawnie w ciele programu odpowiednim poleceniem. Aby wywołać wyjątek definiowany należy go najpierw zadeklarować w sekcji deklaracji bloku: brak_danych EXCEPTION; Z każdym wyjątkiem (predefiniowanym i definiowanym) musi być związana procedura obsługi wyjątku, którą definiujemy w ostatnim bloku lub podbloku programu, oddzielonym od pozostałych bloków słowem kluczowym EXCEPTION: EXCEPTION * początek bloku definiowania wyjątków * WHEN brak_danych THEN *jeśli wywołany wyjątek brak_danych * INSERT INTO pracownicy VALUES (...);

17 UWAGA: Jeśli chcemy aby ta sama procedura obsługi wyjątku ma być wykonywana dla różnych wyjątków, w klauzuli WHEN należy nazwy wyjątków oddzielić od siebie słowem kluczowym OR. Procedura obsługi wyjątków predefiniowanych jest wywoływana niejawnie w trakcie działania programu, może być również wywołana jawnie w ciele programu. Przykładowo, próba zamknięcia kursora, który nie został wcześniej otwarty spowoduje wywołanie wyjątku niejawnego, którego procedurę obsługi umieszczono po słowie kluczowym exception. Przykład 15 declare cursor pracownik_kursor is select numer, nazwisko, placa_pod from pracownik; pracownik_rekord pracownik_kursor%rowtype; begin close pracownik_kursor; * zamknięcie kursora, który nie został wcześniej otwarty * exception when INVALID_CURSOR then null; end; Wyjątek i związaną z nim procedurę obsługi wywołujemy jawnie poleceniem raise. select count(*) into liczba_prac from pracownicy; if liczba_prac = 0 then raise brak_danych;

18 Wybrane predefiniowane wyjątki: DUP_VAL_ON_INDEX - wywoływany, gdy na skutek wykonania polecenia insert lub update różne rekordy relacji posiadają tę samą wartość atrybutu zadeklarowanego jako unikalny; INVALID_CURSOR - wywoływany w wyniku wykonania operacji na kursorze, która jest niepoprawna w pewnym kontekście, np. Zamknięcie nieotwartego kursora; INVALID_NUMBER - wywoływany, gdy nie jest możliwa konwersja łańcucha znaków do postaci liczby, ponieważ łańcuch zawiera niedopuszczalne wartości; LOGIN_DENIED - wywoływany w przypadku podania niepoprawnych parametrów w poleceniu rozpoczęcia sesji - login, np. nazwy użytkownika lub hasła; NO_DATA_FOUND - wywoływany, gdy polecenie select nie wyznacza żadnej krotki; NOT_LOGGED_ON - wywoływany w wyniku próby wykonania funkcji Oracle przez użytkownika nie dołączonego do systemu; PROGRAM_ERROR - wywoływany w wyniku błędnego działania programu PLSQL; STORAGE_ERROR - wywoływany w wyniku błędu pamięci lub braku miejsca w pamięci; TIMEOUT_ON_RESOURCE - wywoływany po upłynięciu czasu oczekiwania na przydzielenie zasobu;

19 TOO_MANY_ROWS - wywoływany, gdy jest wymagana dokładnie jedna krotka, a polecenie select wyznacza większą liczbę krotek; VALUE_ERROR - wywoływany w przypadku błędu konwersji typów danych (np. próby wpisania daty do numerycznego pola krotki) lub, gdy aktualna długość danej przekracza wcześniej zadeklarowaną długość (np. próba wpisania do pola krotki o długości 3 znaków danej o długości 5 znaków); ZERO_DIVIDE - wywoływany w wyniku próby dzielenia przez 0; OTHERS - wywoływany w dla wszystkich wyjątków, które nie zostały wyspecyfikowane w bloku exception; definiowany jako ostatni w bloku exception. Do uzyskania informacji o błędzie można uzyskać dzięki funkcjom: SQLCODE zwraca bieżący kod błędu, dla wyjątków zdefiniowanych przez użytkownika zwraca 1; SQLERRM zwraca tekst komunikatu o bieżącym błędzie, dla wyjątków zdefiniowanych przez użytkownika zwraca komunikat Userdefined Exception. Może być wywoływana z pojedynczym argumentem liczbowym: 0 normalne, udane zakończenie; > 0 i <> +100 wyjątek nie jest wyjątkiem systemowym Oracle; < 0 zwraca komunikat skojarzony z błędem; bez argumentu zwraca zawsze normalne, udane zakończenie. Wyżej wymienione funkcje przypisywane są zmiennym lokalnym, które następnie stosowane są w instrukcjach SQL. Zad.6 Zdefiniuj kursor zawierający nazwiska i daty zatrudnienia wszystkich asystentów. Posłuż się tym kursorem do wyświetlenia rekordów w formie zdań Asystent <nazwisko> pracuje od <data_zatrudnienia>. Posłuż się poleceniem FETCH.

20 Kolekcje Tablice indeksowane: TYPE nazwa_typu IS TABLE OF typ INDEX BY BINARY_INTEGER; Tablice indeksowane dla typów nieskalarnych: rekordy TYPE nazwa_typu IS TABLE OF typ_rekord INDEX BY BINARY_INTEGER; Przykład 16 TYPE t_etat IS TABLE OF etat%rowtype INDEX BY BINARY_INTEGER; zm_t_etat t_etat; BEGIN SELECT * INTO zm_t_etat(1000) FROM etat WHERE nazwa = 'profesor'; DBMS_OUTPUT.PUT_LINE(zm_t_etat(1000).nazwa); zm_t_etat(1001) := 'audytor'; DBMS_OUTPUT.PUT_LINE(zm_t_etat(1001).nazwa); END; obiekty Zaczynamy od utworzenia typu obiektowego, a następnie można tworzyć egzemplarze gotowego typu obiektowego. Przykład 17 CREATE OR REPLACE TYPE Moj_obiekt AS OBJECT( pole_1 number, pole_2 varchar2(20), pole_3 date);

21 TYPE t_obiektow IS TABLE OF Moj_obiekt INDEX BY BINARY_INTEGER; zm_obiektow t_obiektow; BEGIN zm_obiektow(1) := Moj_obiekt(1, NULL, NULL); zm_obiektow(1).pole_1 := 'Norbert'; zm_obiektow(1).pole_2 := sysdate; DBMS_OUTPUT.PUT_LINE(zm_obiektow(1).pole_1 ' ' zm_obiektow(1).pole_2 ' ' zm_obiektow(1).pole_3); END; tabele zagnieżdżone Tabele zagnieżdżone można tworzyć używając kluczy sekwencyjnych, a te nie mogą być liczbami ujemnymi. Tabele zagnieżdżone można zapisywać w bazie danych. Maksymalna liczba wierszy w tabeli zagnieżdżonej wynosi 2 GB (to maksymalna wartość klucza). Składnia: TYPE nazwa IS TABLE OF typ_tablicowy [NOT NULL]; gdzie typ_tablicowy może być typem wbudowanym, typem zdefiniowanym przez użytkownika lub wyrażeniem zawierającym %TYPE, ale nie może być to jeden z typów: BOOLEAN, NCHAR, NVARCHAR2 lub REF CURSOR. Gdy występuje fraza NOT NULL, elementy tabeli zagnieżdżonej nie mogą przyjmować wartości NULL.

22 Przykład 18 TYPE tabobiektow IS TABLE OF Moj_obiekt; zm_obiektow tabobiektow := tabobiektow(moj_obiekt(1,'ala',sysdate)); BEGIN DBMS_OUTPUT.PUT_LINE(zm_obiektow(1).pole_1); END; Metody kolekcji (tabele zagnieżdżone) Metoda Typ zwracanej wartości Opis EXISTS BOOLEAN Sprawdza istnienie danego elementu kolekcji. COUNT NUMBER Zwraca liczbę elementów w kolekcji. LIMIT NUMBER Zwraca maksymalną liczbę elementów w kolekcji. FIRST (LAST) NEXT (PRIOR) EXTEND NA BINARY_INTEGER Zwraca pierwszy (ostatni) element kolekcji. BINARY_INTEGER Zwraca następny (poprzedni) element kolekcji względem danego. Dodaje element do kolekcji. TRIM NA Usuwa element z końca kolekcji. DELETE NA Usuwa wybrane elementy kolekcji. Poprawne dla Tabele indeksowane, tabele zagnieżdżone. Tabele indeksowane, tabele zagnieżdżone. Tabele zagnieżdżone (zawsze zwraca NULL). Tabele indeksowane, tabele zagnieżdżone. Tabele indeksowane, tabele zagnieżdżone. Tabele zagnieżdżone. Tabele zagnieżdżone Tabele indeksowane, tabele zagnieżdżone.

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

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ]; Braki w SQL obsługi zdarzeń i sytuacji wyjątkowych funkcji i procedur użytkownika definiowania złożonych ograniczeń integralnościowych Proceduralny SQL Transact- SQL używany przez Microsoft SQL Server

Bardziej szczegółowo

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

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1 Kursory i wyjątki Kursory i praca z kursorami, kursory jawne i niejawne, otwieranie kursora, pobieranie z kursora, zamykanie kursora, wyjątki systemowe i użytkownika, zgłaszanie i obsługa wyjątków 1 Kursor

Bardziej szczegółowo

Deklarowanie kursora

Deklarowanie kursora Kursory i wyjątki Kursory i praca z kursorami, kursory jawne i niejawne, otwieranie kursora, pobieranie z kursora, zamykanie kursora, wyjątki systemowe i użytkownika, zgłaszanie i obsługa wyjątków 1 Kursor

Bardziej szczegółowo

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

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora Kursor Rozdział 10a Kursory Kursory i praca z kursorami, kursory jawne i niejawne, otwieranie kursora, pobieranie z kursora, zamykanie kursora, zmienne kursorowe, wyrażenie CURSOR Każde zapytanie SQL umieszczone

Bardziej szczegółowo

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

Język PL/SQL. Rozdział 2. Kursory Język PL/SQL. Rozdział 2. Kursory Deklarowanie kursora, otwieranie kursora, pobieranie z kursora, zamykanie kursora, zmienne kursorowe, wyrażenie CURSOR, kursory niejawne. 1 Kursor jawny Każde zapytanie

Bardziej szczegółowo

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

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków... Plan wykładu Spis treści 1 Kursory 1 2 Wyjątki 4 2.1 Wyjątki predefiniowane............................. 4 2.2 Wyjątki niezdefiniowane wcześniej....................... 5 2.3 Definiowanie własnych wyjątków........................

Bardziej szczegółowo

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

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2) Kursor jawny Każde zapytanie SQL umieszczone w programie PL/SQL może zwrócić zero, jedną bądź wiele krotek. Aby efektywnie przetworzyć krotkizwrócone przez zapytanie korzystamy z kursorów. Kursor jest

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 2 Kusory Wprowadzenie Kursory użytkownika Kursory domyślne Zmienne kursora Wyrażenia kursora - 2 - Wprowadzenie Co to jest kursor?

Bardziej szczegółowo

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

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL Plan wykładu Uzupełnienie projektu fizycznego Czym jest PL/SQL Bloki w PL/SQL Zmienne i stałe Instrukcje sterujące Wykorzystanie SQL w PL/SQL Kursory Wyjątki Projekt fizyczny bazy danych Braki projektu

Bardziej szczegółowo

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

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa) Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski Uniwersytet Kardynała Stefana Wyszyńskiego, Warszawa dwunasty PL/SQL, c.d. 1 / 37 SQL to za mało SQL brakuje możliwości dostępnych w językach proceduralnych.

Bardziej szczegółowo

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

Październik 2015. Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż. 1/40 Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Październik 2015 2/40 Plan wykładu Uzupełnienie projektu fizycznego Czym jest PL/SQL Bloki w PL/SQL Wykorzystanie 3/40 Projekt

Bardziej szczegółowo

PODSTAWY BAZ DANYCH 13. PL/SQL

PODSTAWY BAZ DANYCH 13. PL/SQL PODSTAWY BAZ DANYCH 13. PL/SQL 1 Wprowadzenie do języka PL/SQL Język PL/SQL - rozszerzenie SQL o elementy programowania proceduralnego. Możliwość wykorzystywania: zmiennych i stałych, instrukcji sterujących

Bardziej szczegółowo

Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków.

Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków. Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków. 1 Komunikaty o błędach serwera Oracle Wykonanie niepoprawnej operacji w trakcie działania

Bardziej szczegółowo

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

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów SQL3 wprowadza następujące kolekcje: zbiory ( SETS ) - zestaw elementów bez powtórzeń, kolejność nieistotna listy ( LISTS ) - zestaw

Bardziej szczegółowo

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

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne Materiały dostępne są na stronie: Materiały Technologie baz danych aragorn.pb.bialystok.pl/~gkret Wykład 5: Kursory jawne. Podprogramy. Małgorzata Krętowska Wydział Informatyki Politechnika Białostocka

Bardziej szczegółowo

PL/SQL. Zaawansowane tematy PL/SQL

PL/SQL. Zaawansowane tematy PL/SQL PL/SQL Zaawansowane tematy PL/SQL Cele Poznanie złożonych i referencyjnych typów danych Poznanie konstrukcji kursora Poznanie kodu składowanego Poznanie procedur i funkcji 2 Złożone typy danych RECORD

Bardziej szczegółowo

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

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu Procedury składowane Kolejnym typem programu języka PL/SQL są procedury składowane. Procedury mogą posiadać parametry typu IN, OUT lub IN OUT. Umożliwiają wykonanie operacji na danych w bazie, mogą też

Bardziej szczegółowo

Procedury i funkcje składowane

Procedury i funkcje składowane Procedury i funkcje składowane Zmienne podstawienia i zmienne wiązane, podprogramy, procedury składowane, typy argumentów, wywoływanie procedur, funkcje składowane, poziomy czystości funkcji, funkcje tablicowe

Bardziej szczegółowo

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

Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów Plan wykładu Kursory: deklaracja, otwieranie, pobieranie danych, zamykanie Kursory: atrybuty Kursory: pętle, rekordy Kursory z parametrami BAZY DANYCH II WYKŁAD 4 dr inż. Agnieszka Bołtuć Co to jest kursor?

Bardziej szczegółowo

Bloki anonimowe w PL/SQL

Bloki anonimowe w PL/SQL Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia

Bardziej szczegółowo

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

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH Plan wykładu 2 TWORZENIE APLIKACJI BAZODANOWYCH Wykład 2: Wprowadzenie do PL/SQL: bloki anonimowe, zmienne, kursory Wprowadzenie do PL/SQL Bloki Podstawowe składowe języka Zmienne i stałe Kursory Małgorzata

Bardziej szczegółowo

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

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE, 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

Bardziej szczegółowo

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

Plan wykładu BAZY DANYCH II WYKŁAD 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone Plan wykładu Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone BAZY DANYCH II WYKŁAD 5 dr inż. Agnieszka Bołtuć Kolekcje Tablice asocjacyjne Używane w celu gromadzenia danych tego samego typu, Rekordy

Bardziej szczegółowo

Bloki anonimowe w PL/SQL

Bloki anonimowe w PL/SQL Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia

Bardziej szczegółowo

Oracle Developer Suite. Budowa aplikacji użytkownika końcowego

Oracle Developer Suite. Budowa aplikacji użytkownika końcowego Oracle Developer Suite Budowa aplikacji użytkownika końcowego Składniki pakietu Oracle Developer Suite Oracle Forms Builder formularze (aplikacje dostępne z poziomu przeglądarki internetowej, model 3-warstwowy)

Bardziej szczegółowo

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

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle Rozszerzenie obiektowe w SZBD Oracle Cześć 2. Kolekcje Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Malinowski Nowak Kowalski tablica zagnieżdżona (ang.

Bardziej szczegółowo

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

PL/SQL. Lidia Małkiewicz i Cezary Skubała PL/SQL Lidia Małkiewicz i Cezary Skubała Jest językiem trzeciej generacji (3GL), który udostępnia konstrukty programistyczne, włączając w to deklaracje zmiennych, pętlę, obsługę błędów itd. Obecnie PL/SQL

Bardziej szczegółowo

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

Kursory - pobieranie danych z baz danych do programów PL/SQL Kursory - pobieranie danych z baz danych do programów PL/SQL Rozważania będą dotyczyć sposobów pobierania danych z baz danych do programów przechowywanych w pamięci. Interakcja języka PL/SQL z językiem

Bardziej szczegółowo

BAZY DANYCH W APLIKACJACH SIECIOWYCH

BAZY DANYCH W APLIKACJACH SIECIOWYCH BAZY DANYCH W APLIKACJACH SIECIOWYCH Wykład 4 Wyjątki. Wyzwalacze bazodanowe. (Wybrane materiały) Dr inż. E. Busłowska Obsługa wyjątków w PLSQL Wyjątek (ang. Exception) - błąd lub ostrzeżenie w PLSQL Typy

Bardziej szczegółowo

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

Język PL/SQL Procedury i funkcje składowane Język PL/SQL Procedury i funkcje składowane Podprogramy, procedury i funkcje składowane, typy argumentów, wywoływanie procedur i funkcji, poziomy czystości funkcji 1 Podprogramy Procedury (wykonują określone

Bardziej szczegółowo

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

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych Plan wykładu BAZY DANYCH II WYKŁAD 3 Zasięg zmiennych Zmienne powiązane Instrukcje warunkowe Pętle Pobieranie danych SQL w PL/SQL Rekordy dr inż. Agnieszka Bołtuć Zasięg zmiennych Zmienna jest dostępna

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 3 Rekordy Tabele indeksowe asocjacyjne - 2 - Rekordy Co to jest rekord? Rodzaje rekordów Rekordy użytkownika Rekordy tabelowe Rekordy

Bardziej szczegółowo

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

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze Cechy bloków nazwanych: w postaci skompilowanej trwale przechowywane na serwerze wraz z danymi wykonywane na żądanie użytkownika lub w

Bardziej szczegółowo

1. ELEMENTY JĘZYKA PL/SQL

1. ELEMENTY JĘZYKA PL/SQL 1. ELEMENTY JĘZYKA PL/SQL Aplikacje korzystające z PL/SQL będącego proceduralnym rozszerzeniem SQL mogą wykonywać procedury i funkcje języka PL/SQL składowane w bazie danych oraz wysyłać własne programy

Bardziej szczegółowo

Pakiety podprogramów Dynamiczny SQL

Pakiety podprogramów Dynamiczny SQL Pakiety podprogramów Dynamiczny SQL Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL 1 Pakiety Pakiet (ang. package)

Bardziej szczegółowo

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u będziemy używać w taki sam sposób, jak wbudowanych funkcji

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 5 Wprowadzenie Tworzenie i wykonywanie procedur i funkcji Instrukcja RETURN Parametry procedur i funkcji oraz ich przesyłanie Metadane

Bardziej szczegółowo

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

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Składowe wyzwalacza ( ECA ): określenie zdarzenia ( Event ) określenie

Bardziej szczegółowo

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Cheatsheet PL/SQL Andrzej Klusiewicz  1/9 Declare y integer; z varchar2(50); d date; null; Declare x integer:=10; null; x integer; x:=10; dbms_output.put_line('hello world'); for x in 1..10 loop Deklaracja 4 zmiennych. Jednej typu rzeczywistego,

Bardziej szczegółowo

OBSŁUGA WYJĄTKÓW. Mechanizm języka PL/SQL. Wyjątki:

OBSŁUGA WYJĄTKÓW. Mechanizm języka PL/SQL. Wyjątki: OBSŁUGA WYJĄTKÓW W języku PL/SQL zaimplementowano obsługę błędów za pomocą: mechanizmu wyjątków programów obsługi wyjątków w tzw. sekcji obsługi wyjątków. Wyjątki mogą być związane z: błędami systemu Oracle

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/

Oracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 4 Wyjątki PL/SQL Mechanizmy dotyczące błędów Typy wyjątków Obsługa wyjątków PL/SQL Obsługa błędów predefiniowanych, użytkownika

Bardziej szczegółowo

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

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1 Procedury wyzwalane procedury wyzwalane, cel stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie wyzwalaczami 1 Procedury wyzwalane

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 9 Kolekcje Operacje na kolekcjach Testowanie kolekcji Kolekcje w bazie danych Funkcje tabelaryczne Kolekcje wielopoziomowe - 2 -

Bardziej szczegółowo

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

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL.

Bardziej szczegółowo

Kursory. A. Pankowska 1

Kursory. A. Pankowska 1 Kursory 1 Kursory Kursor jest mechanizmem pozwalającym obsłużyć zbiór zawierający wiele wierszy danych (generowany np. poleceniem SELECT). Jak wskaźnik przebiega on po kolejnych krotkach ze zbioru danych,

Bardziej szczegółowo

Administracja i programowanie pod Microsoft SQL Server 2000

Administracja i programowanie pod Microsoft SQL Server 2000 Administracja i programowanie pod Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 5 Kursory w SQL Serverze Wprowadzenie Modele kursorów Używanie kursorów Rodzaje kursorów Praca

Bardziej szczegółowo

Technologie baz danych WYKŁAD 7: Wyjątki

Technologie baz danych WYKŁAD 7: Wyjątki Wydział Informatyki Politechnika Białostocka Obsługa wyjątków Technologie baz danych WYKŁAD 7: Wyjątki [] [] Agnieszka Oniśko, Małgorzata Krętowska TBD-wyjątki 1 TBD-wyjątki 2 Sposoby powstania sytuacji

Bardziej szczegółowo

DECLARE VARIABLE zmienna1 typ danych; BEGIN

DECLARE VARIABLE zmienna1 typ danych; BEGIN Procedury zapamiętane w Interbase - samodzielne programy napisane w specjalnym języku (właściwym dla serwera baz danych Interbase), który umożliwia tworzenie zapytań, pętli, instrukcji warunkowych itp.;

Bardziej szczegółowo

Paweł Rajba

Paweł Rajba Paweł Rajba pawel@cs.uni.wroc.pl http://www.itcourses.eu/ Wprowadzenie Używanie kursorów Rodzaje kursorów Praca z kursorami Co to jest kursor? Cykl życia kursora utworzenie pobieranie wartości ewentualnie

Bardziej szczegółowo

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki. Pakiety Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki. Pakiet składa się ze: specyfikacji (interfejsu) i ciała (implementacji). W specyfikacji mieszczą

Bardziej szczegółowo

15. Funkcje i procedury składowane PL/SQL

15. Funkcje i procedury składowane PL/SQL 15. Funkcje i procedury składowane PLSQL 15.1. SQL i PLSQL (Structured Query Language - SQL) Język zapytań strukturalnych SQL jest zbiorem poleceń, za pomocą których programy i uŝytkownicy uzyskują dostęp

Bardziej szczegółowo

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

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 8 Wprowadzenie Definiowanie typu obiektowego Porównywanie obiektów Tabele z obiektami Operacje DML na obiektach Dziedziczenie -

Bardziej szczegółowo

Plan wykładu BAZY DANYCH II WYKŁAD 2. Bloki. Struktura bloku

Plan wykładu BAZY DANYCH II WYKŁAD 2. Bloki. Struktura bloku Plan wykładu BAZY DANYCH II WYKŁAD 2 Bloki, struktura, sekcje Bloki anonimowe Tworzenie i uruchamianie Identyfikatory Literały Typy danych dr inż. Agnieszka Bołtuć Bloki Struktura bloku W programach pisanych

Bardziej szczegółowo

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Obiektowe bazy danych Ćwiczenia laboratoryjne (?) Obiektowe bazy danych Ćwiczenia laboratoryjne (?) Tworzenie typów obiektowych 1. Zdefiniuj typ obiektowy reprezentujący SAMOCHODY. Każdy samochód powinien mieć markę, model, liczbę kilometrów oraz datę

Bardziej szczegółowo

Zaawansowane bazy danych i hurtownie danych semestr I

Zaawansowane bazy danych i hurtownie danych semestr I Ważne informacje Wydział Informatyki Politechnika Białostocka Zaawansowane bazy danych i hurtownie danych semestr I WYKŁAD 1: Wprowadzenie do przedmiotu, proceduralny język SQL 1. Sylabus w USOS ie: Ogólny

Bardziej szczegółowo

SQL (ang. Structured Query Language)

SQL (ang. Structured Query Language) SQL (ang. Structured Query Language) SELECT pobranie danych z bazy, INSERT umieszczenie danych w bazie, UPDATE zmiana danych, DELETE usunięcie danych z bazy. Rozkaz INSERT Rozkaz insert dodaje nowe wiersze

Bardziej szczegółowo

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

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image) Elementy języka T-SQL 40. Polecenie PRINT jest wykorzystywane do przekazania wiadomości tekstowej (maksymalna długość 8000 znaków) Przykład PRINT 'Aktualna data: '+convert(char(8),getdate()) PRINT 'Aktualny

Bardziej szczegółowo

Wprowadzenie do języka PL/SQL. Język PL/SQL Wprowadzenie. Struktura blokowa programu. Przykładowy program w PL/SQL. Zmienne rekordowe.

Wprowadzenie do języka PL/SQL. Język PL/SQL Wprowadzenie. Struktura blokowa programu. Przykładowy program w PL/SQL. Zmienne rekordowe. Wprowadzenie do języka PL/SQL Język PL/SQL Wprowadzenie Język PL/SQL to rozszerzenie SQL o elementy programowania proceduralnego i obiektowego. PL/SQL umożliwia wykorzystanie: zmiennych i stałych struktur

Bardziej szczegółowo

Język SQL. Rozdział 2. Proste zapytania

Język SQL. Rozdział 2. Proste zapytania Język SQL. Rozdział 2. Proste zapytania Polecenie SELECT, klauzula WHERE, operatory SQL, klauzula ORDER BY. 1 Wprowadzenie do języka SQL Język dostępu do bazy danych. Język deklaratywny, zorientowany na

Bardziej szczegółowo

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

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

Bardziej szczegółowo

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko Typy rozproszonych baz Systemy typu klient-serwer (jeden serwer) Jednorodna rozproszona baza (kilka serwerow, jeden system zarzadzania baza ) Niejednorodna

Bardziej szczegółowo

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń PL/SQL Zaawansowane tematy PL/SQL Piotr Medoń Cele Omówienie transakcji bazodanowych Omówienie obsługi wyjątków Zarządzanie perspektywami Tworzenie i usuwanie sekwencji Budowa wyzwalaczy 2 Transakcje bazodanowe

Bardziej szczegółowo

Składowane procedury i funkcje

Składowane procedury i funkcje Składowane procedury i funkcje Procedury i funkcje są zestawem poleceń SQL, które są przechowywane na serwerze (tak jak dane w tablicach). Istnieją sytuacje, kiedy procedury i funkcje są szczególnie przydatne.

Bardziej szczegółowo

Język PL/SQL Pakiety podprogramów

Język PL/SQL Pakiety podprogramów Język PL/SQL Pakiety podprogramów Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora) 1 Pakiety Pakiet (ang. package) grupuje powiązane

Bardziej szczegółowo

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

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych Języki programowania wysokiego poziomu PHP cz.4. Bazy danych PHP i bazy danych PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych: MySQL moduł mysql albo jego nowsza wersja mysqli (moduł

Bardziej szczegółowo

Indeksy. Indeks typu B drzewo

Indeksy. Indeks typu B drzewo Indeksy dodatkowe struktury służące przyśpieszeniu dostępu do danych o użyciu indeksu podczas realizacji poleceń decyduje SZBD niektóre systemy bazodanowe automatycznie tworzą indeksy dla kolumn o wartościach

Bardziej szczegółowo

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

W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP). Procedury składowane c.d. Parametry tablicowe w Transact-SQL. W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP). Zadanie 1. Proszę napisad procedurę składowaną, która

Bardziej szczegółowo

Wykład 5. SQL praca z tabelami 2

Wykład 5. SQL praca z tabelami 2 Wykład 5 SQL praca z tabelami 2 Wypełnianie tabel danymi Tabele można wypełniać poprzez standardową instrukcję INSERT INTO: INSERT [INTO] nazwa_tabeli [(kolumna1, kolumna2,, kolumnan)] VALUES (wartosc1,

Bardziej szczegółowo

Język PL/SQL Wprowadzenie

Język PL/SQL Wprowadzenie Język PL/SQL Wprowadzenie Koncepcja języka, zmienne i stałe, typy zmiennych, nadawanie wartości zmiennym, instrukcje warunkowe, pętle, sterowanie przebiegiem programu 1 Wprowadzenie do języka PL/SQL Język

Bardziej szczegółowo

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

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie Programowanie MSQL show databases; - pokazanie jakie bazy danych są dostępne na koncie show databases; - wyświetlenie wszystkich baz danych na serwerze create database nazwa; - za nazwa wstawiamy wybraną

Bardziej szczegółowo

Systemy GIS Tworzenie zapytań w bazach danych

Systemy GIS Tworzenie zapytań w bazach danych Systemy GIS Tworzenie zapytań w bazach danych Wykład nr 6 Analizy danych w systemach GIS Jak pytać bazę danych, żeby otrzymać sensowną odpowiedź......czyli podstawy języka SQL INSERT, SELECT, DROP, UPDATE

Bardziej szczegółowo

1. Wyzwalacze BD (ang. triggers)

1. Wyzwalacze BD (ang. triggers) 1. Wyzwalacze BD (ang. triggers) Wyzwalacz bazy danych jest procedurą składowaną w bazie powiązaną z jedną konkretną tablicą. Z pojedynczą tablicą może być związane wiele wyzwalaczy, natomiast pojedynczy

Bardziej szczegółowo

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Wyzwalacze. Anna Fiedorowicz Bazy danych 2 Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych

Bardziej szczegółowo

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Prezentacja Danych i Multimedia II r Socjologia Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Celem ćwiczeń jest poznanie zasad tworzenia baz danych i zastosowania komend SQL. Ćwiczenie I. Logowanie

Bardziej szczegółowo

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych SQL SQL (ang. Structured Query Language): strukturalny język zapytań używany do tworzenia strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych

Bardziej szczegółowo

Język SQL. Rozdział 4. Funkcje grupowe Funkcje grupowe, podział relacji na grupy, klauzule GROUP BY i HAVING.

Język SQL. Rozdział 4. Funkcje grupowe Funkcje grupowe, podział relacji na grupy, klauzule GROUP BY i HAVING. Język SQL. Rozdział 4. Funkcje grupowe Funkcje grupowe, podział relacji na grupy, klauzule GROUP BY i HAVING. 1 Funkcje grupowe (agregujące) (1) Działają na zbiorach rekordów, nazywanych grupami. Rekordy

Bardziej szczegółowo

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: Grupa A (LATARNIE) Imię i nazwisko: Numer albumu: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: Nazwisko prowadzącego: 11: 12: Suma: Ocena: Zad. 1 (10 pkt) Dana jest relacja T. Podaj wynik poniższego zapytania (podaj

Bardziej szczegółowo

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Laboratorium nr 4. Temat: SQL część II. Polecenia DML Laboratorium nr 4 Temat: SQL część II Polecenia DML DML DML (Data Manipulation Language) słuŝy do wykonywania operacji na danych do ich umieszczania w bazie, kasowania, przeglądania, zmiany. NajwaŜniejsze

Bardziej szczegółowo

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

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych

Bardziej szczegółowo

Systemowe aspekty baz

Systemowe aspekty baz Systemowe aspekty baz danych Deklaracja zmiennej Zmienne mogą być wejściowe i wyjściowe Zmienne w T-SQL można deklarować za pomocą @: declare @nazwisko varchar(20) Zapytanie z użyciem zmiennej: select

Bardziej szczegółowo

Tabele wykorzystywane w przykładach

Tabele wykorzystywane w przykładach Tabele wykorzystywane w przykładach create table departamenty( dep_id serial primary key, nazwa_departamentu text ); Tabele używane w wybranych przkładach create table pracownicy ( emp_id serial primary

Bardziej szczegółowo

Procedury Funkcje Pakiety. Tworzenie procedury

Procedury Funkcje Pakiety. Tworzenie procedury Podprogramy tworzy się za pomocą instrukcji CREATE. Tworzenie procedury Składnia CREATE [OR REPLACE] PROCEDURE nazwa_procedury [(param1 [IN OUT IN OUT] typ_danych [:= DEFAULT wyrażenie], param2 [IN OUT

Bardziej szczegółowo

SQL 4 Structured Query Lenguage

SQL 4 Structured Query Lenguage Wykład 5 SQL 4 Structured Query Lenguage Instrukcje sterowania danymi Bazy Danych - A. Dawid 2011 1 CREATE USER Tworzy nowego użytkownika Składnia CREATE USER specyfikacja użytkownika [, specyfikacja użytkownika]...

Bardziej szczegółowo

Relacyjne bazy danych. Podstawy SQL

Relacyjne bazy danych. Podstawy SQL Relacyjne bazy danych Podstawy SQL Język SQL SQL (Structured Query Language) język umożliwiający dostęp i przetwarzanie danych w bazie danych na poziomie obiektów modelu relacyjnego tj. tabel i perspektyw.

Bardziej szczegółowo

Język PL/SQL Wprowadzenie

Język PL/SQL Wprowadzenie Język PL/SQL Wprowadzenie Koncepcja języka, zmienne i stałe, typy zmiennych, nadawanie wartości zmiennym, instrukcje warunkowe, pętle, sterowanie przebiegiem programu 1 Wprowadzenie do języka PL/SQL Język

Bardziej szczegółowo

Optymalizacja poleceń SQL Metody dostępu do danych

Optymalizacja poleceń SQL Metody dostępu do danych Optymalizacja poleceń SQL Metody dostępu do danych 1 Metody dostępu do danych Określają, w jaki sposób dane polecenia SQL są odczytywane z miejsca ich fizycznej lokalizacji. Dostęp do tabeli: pełne przeglądnięcie,

Bardziej szczegółowo

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

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń PL/SQL Część 1 Bloki PL/SQL Piotr Medoń Cele Zapoznanie się z podstawowymi typami PL/SQL Zapoznanie się z blokiem PL/SQL Zapoznanie się z instrukcjami sterującymi wykonaniem 2 Blok PL/SQL Struktura bloku

Bardziej szczegółowo

Delphi Laboratorium 3

Delphi Laboratorium 3 Delphi Laboratorium 3 1. Procedury i funkcje Funkcja jest to wydzielony blok kodu, który wykonuje określoną czynność i zwraca wynik. Procedura jest to wydzielony blok kodu, który wykonuje określoną czynność,

Bardziej szczegółowo

Autor: Joanna Karwowska

Autor: Joanna Karwowska Autor: Joanna Karwowska Wygodniejszym i wydajniejszym sposobem przechowywania i korzystania z dużej ilości danych zapisanych na serwerze jest współpraca z relacyjną bazą danych. 2 1. Utworzyć bazę danych.

Bardziej szczegółowo

Wyzwalacze TWORZENIE WYZWALACZY

Wyzwalacze TWORZENIE WYZWALACZY Wyzwalacze: podobnie jak procedury i funkcje, są nazwanymi blokami PL/SQL zawierającymi sekcje deklaracji, wykonania i obsługi wyjątków; nie akceptują argumentów; muszą być składowane jako samodzielne

Bardziej szczegółowo

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

Język PL/SQL. Rozdział 4. Procedury i funkcje składowane Język PL/SQL. Rozdział 4. Procedury i funkcje składowane Podprogramy, procedury składowane, funkcje składowane, wywoływanie podprogramów. (c) Instytut Informatyki Politechniki Poznańskiej 1 Podprogramy

Bardziej szczegółowo

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się. Za operacje na bazie odpowiada biblioteka mysqli (i jak improved). Posiada ona interfejs obiektowy jak i proceduralny. Podłączenie do bazy (obiektowo) mysqli:: construct() ([ string $host [, string $username

Bardziej szczegółowo

Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL 2012-01-20

Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL 2012-01-20 Plan wykładu BAZY DANYCH II WYKŁAD 9 Dynamiczny SQL, NDS, EXECUTE IMMEDIATE, Pakiet DBMS_SQL, Obiekty w PL/SQL, Tworzenie, wywoływanie, dziedziczenie, etc. dr inż. Agnieszka Bołtuć Dynamiczny SQL Pozwala

Bardziej szczegółowo

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Język PL/SQL. Rozdział 6. Procedury wyzwalane Język PL/SQL. Rozdział 6. Procedury wyzwalane Procedury wyzwalane, cele stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie

Bardziej szczegółowo

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

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych: PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych: MySQL moduł mysql albo jego nowsza wersja mysqli (moduł mysqli ma dwa interfejsy: proceduralny i obiektowy) PostgreSQL Oracle MS

Bardziej szczegółowo

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście. Rodzaje triggerów Triggery DML na tabelach INSERT, UPDATE, DELETE Triggery na widokach INSTEAD OF Triggery DDL CREATE, ALTER, DROP Triggery na bazie danych SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN

Bardziej szczegółowo

Język SQL, zajęcia nr 1

Język SQL, zajęcia nr 1 Język SQL, zajęcia nr 1 SQL - Structured Query Language Strukturalny język zapytań Login: student Hasło: stmeil14 Baza danych: st https://194.29.155.15/phpmyadmin/index.php Andrzej Grzebielec Najpopularniejsze

Bardziej szczegółowo

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML Procedury wyzwalane Rozdział 13 Procedury wyzwalane procedury wyzwalane, cel stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie

Bardziej szczegółowo

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

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu): Utwórz bazę danych Cw: CREATE DATABASE Cw Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu): DBCC USEROPTIONS Przykład z zapisem do tabeli tymczasowej: --Jeśli istnieje tabela tymczasowa

Bardziej szczegółowo