Projektowanie baz danych. Bartosz Reichel PG 2011/2012

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

Download "Projektowanie baz danych. Bartosz Reichel PG 2011/2012"

Transkrypt

1 Projektowanie baz danych Bartosz Reichel PG 2011/2012

2 Zasady zaliczenia Laboratorium 50% Wykład (egzamin/zaliczenie) 50%

3 Literatura Oracle Database 11g. Programowanie w języku PL/SQL, Michael McLaughlin, Helion 2009 Oracle SQL Recipes A Problem-Solution Approach Oracle Database 11g i SQL. Programowanie; Jason Price, Helion 2009 Książka SQL. Zaawansowane techniki programowania, Joe Celko...

4 Przypomnienie Jak połączyć się z bazą danych? Czy koniecznie muszę pracować z bazą danych Oracle?

5 Kilka słó przypomnienia Posługiwanie się narzędziami, co będzie nam potrzebne Funkcje, procedury, PL/SQL Kilka przydatnych elementów

6 dbms_output Jest to paczka pozwalająca pisać z PL/SQL do bufora (w tym może to być np.. ekran konsoli) UWAGA: bufor jest zwalniany dopiero po skończonym bloku (a sama paczka nie zawiera czegoś w rodzaju flush). Zatem rezultat widoczny jest dopiero po skończonym bloku.

7 dbms_output.enable Pozwala odblokować możliwość przesyłania danych do bufora. Ważne w szczególności w takich środowiskach jak SQL Developer W przypadku konsoli i np.. SQL* Plus należy włączyć jeszcze opcje wyjścia na konsolę: SET SERVEROUTPUT ON (swoją drogą równoważne z dbms_output.enable(buffer_size => NULL);) dbms_output.enable(buffer_size IN INTEGER DEFAULT 20000);

8 PROCEDURE DBMS_OUTPUT.GET_LINES (lines OUT DBMS_OUTPUT.CHARARR, numlines IN OUT INTEGER);

9 dbms_output.disable Odwrotna do poprzedniej funkcji, blokuje wysyłanie danych do bufora

10 dbms_output.put oraz dbms_output.put_line Pierwsza z nich umieszcza text z parametru funkcji w buforze Druga z nich umieszcza tex z parametru dodając znak końca linii dbms_output.put(a IN VARCHAR2); dbms_output.put_line(a IN VARCHAR2);

11 Przykład Należy zwrócić uwagę na różnicę pomiędzy odblokowaniem bufora a odblokowaniem możliwości wyświetlania tekstu w konsoli Należy zauważyć (co było wspomniane), że wywołania znajdują się w definicji najprostszego bloku oracle.

12

13

14 dbms_output.new_line

15 dbms_output.get_line oraz dbms_output.get_lines Pierwsza z nich czyta jedną linie z bufora Druga linie z bufora Procedura może służyć do czytania np.. z pliku lub przeczytania w Java/.NET/... informacji z bufora do jakiejś zmiennej dbms_output.get_lines(lines OUT CHARARR, numlines IN OUT INTEGER);

16

17

18

19 Czytanie z konsoli (SQL Plus) set verify off; (pokazuje zmienne przed i po zapisie) set define '&';

20 W SQL Developer Uproszczona dość składnia Wiadomo, jest to rozwiązanie na szybko

21 Prompt dosłownie!!

22 A co z wartościami, które się powtarzają? SELECT &&test, &&test FROM dual; SELECT &&test, &&test FROM dual;

23 Pakiet UTL_FILE Pakiet umożliwiający czytanie zapisywanie do pliku. Daje możliwości na dostęp do pliku bezpośrednio z funkcji/procedur/... do plików co idealnie pasuje do problemów jakie należy rozwiązać na laboratorium (nie jest wymagane GUI ani aplikacja zewnętrzna). Posiada funkcje, które są odpowiednikami znanych funkcji (open, close, read, ) z większości języków takich jak np. C

24 Zasady bezpieczeństwa Domyślnie zasady nie pozwalają na zapis plików w systemie operacyjnym (ta zasada tyczy się nie tylko UTL_FILE) Ogólne zasady określone w spfile<sid>.ora (Server Parameter File) Znajdują się w $ORACLE_HOME/database (Win) lub $ORACLE_HOME/dbs (Lin)

25

26 Skoro mamy te same funkcje to powinny nas obowiązywać te same zasady dysponowania zasobami systemowymi co w każdym innym przypadku!!!

27

28 Teoretycznie dokumentacja podaje, że można otwierać pliki zarówno po stronie serwera jak i po stronie klienta. Wiedząc jak działa serwer należy jednak mieć na uwadze, że musi on mieć dostęp do tych plików (Zapytanie jest wykonywane na serwerze). Możliwość wykorzystania spool Jeśli aplikacja ma współdziałać z lokalnymi plikami częściej wykorzystuje się inne rozwiązania.

29 SPOOL SET NEWPAGE 0 SET SPACE 0 SET LINESIZE 80 SET PAGESIZE 0 SET ECHO OFF SET FEEDBACK OFF SET HEADING OFF SET MARKUP HTML OFF SET ESCAPE \ SPOOL TEST.TXT select 'SELECT SYSDATE FROM DUAL' FROM DUAL; SPOOL OFF SQL> select 'SELECT SYSDATE FROM DUAL' FROM DUAL; SELECT SYSDATE FROM DUAL SQL> SPOOL OFF

30

31 Przypomnienie: podstawowe struktury sterujące IF CASE LOOP FOR WHILE

32 UWAGA Pamiętajmy o wartości NULL! not true prawdziwe dla false i NULL not false dla true i NULL Należy wykorzystać funkcję NVL!

33 NVL Funkcja z grupy funkcji (np. NVL2) decydujących co zrobić gdy wyrażenie zwróci NULL NVL(Wyrażenie, wartość) W przypadku gdy wyrażenie zwraca NULL funkcja NVL zwraca wartość w przeciwnym przypadku zwraca to co zwróciło wyrażenie.

34 Instrukcja IF Bloki w oracle (standardowo rozpoczynające się słowem BEGIN i kończące słowem END). Sprawdza warunek złożony z porównania, które musi zwrócić wartość logiczną (NVL, ), zatem może to być też funkcja Wartości mogą zostać skonwertowane niejawnie

35 IF [NOT] (wyrażenie/wartość) [[AND/OR] THEN Blok [ELSE BLOK] END IF;

36

37 Blok ELSIF Możliwość sprawdzania wielu bloków IF (warunek) THEN Blok ELSEIF (warunek) THEN Blok ELSEIF (warunek) THEN Blok ENDIF;

38 Instrukcja CASE Instrukcja znana z innych języków Brak możliwości przechodzenia między blokami (ogólny brak takiego mechanizmu) Jest to konstrukcja podobna do IF-THENELSIF-THEN-ELSE Na końcu MUSI (wedle dokumentacji) być ELSE!

39 CASE wersja z jawnym selektorem

40 CASE z selektorem niejawnym (wyszukiwaniem) Warunek false trzeba podawać jawnie!

41 Operatory porównania Logiczne (AND, OR, NOT) BETWEEN (AND) IN () IS EMPTY IS NULL IS A SET LIKE SUBMULTISET MEBER OF

42 Pętla LOOP Znajduje się w bloku BEGIN END Początek słowo LOOP Koniec END LOOP Warunki sterujące wejściem wyjściem z pętli: EXIT, EXIT WHEN, EXIT WHEN NOT, Konstrukcja IF

43

44 Pętla FOR Konstrukcja FOR (indeks) IN wartosc_min..wartosc..max LOOP Blok (powtarzany) END LOOP Indeks jest typu całkowitego

45

46 Pętla WHILE Konstrukcja: WHILE warunek wejscia LOOP Blok (powtarzany) END LOOP

47 GOTO Tak istnieje

48 Rozszerzenie instrukcji sterujących Kursory niejawne Kursory jawne Instrukcje masowe

49 Kursory Kursory są wynikami zapytania SELECT Pozwalają na przetwarzanie wiersz po wierszu ale też przy użyciu instrukcji masowych (np. FORALL) Są dwa rodzaje kursorów jawne i niejawne

50 Kursor niejawny Każda instrukcja SQL Z pakietu DML(DQL): (SELECT), INSERT, UPDATE, DELETE Kursory niejawne posiadają atrybuty: %FOUND, %ISOPEN, %NOTFOUND, %ROWCOUNT

51

52 Przykład niejawnego kursora wielowierszowego

53 Kursory jawne Należy zadeklarować w bloku DECLARATION Do programisty należy otwarcie, pobranie danych i zamknięcie kursora (OPEN, FETCH, CLOSE)

54 OPEN nazwa kursora [parametry, ] FETCH nazwa kursora INTO [zmienne, ] CLOSE nazwa kursora W tym przypadku znaczenie ma atrybut %ISOPEN pozwalający sprawdzić w jakim stanie znajduje się kursor.

55 Przykład wywołania jawnego

56 Ten sam przykład z pętlą FOR

57 Jaką pętlę wybrać? W pętlach prostych musimy otworzyć, pobrać i zamknąć kursor W pętli FOR dzieje się to niejako automatycznie Pętla FOR jest prostsza w użyciu (ale nie można przypisać zmiennych) Jednak pętla LOOP oraz WHILE daje większe możliwości (co może się przydać w bardziej zaawansowanych konstrukcjach).

58 Przypisanie w pętli FOR

59 Dynamiczne kursory Poszerzają możliwości (nie każda baza danych SQL udostępniająca kursory posiada takie możliwości) Możliwość modyfikowania zapytania tworzącego kursor

60 Przykład

61 Kursor przyjmuje parametry jako zmienne lokalne Może to być koszmarem w późniejszych działaniach na takiej bazie Można przekazywać parametry do kursora poprzez funkcję OPEN

62

63 Pakiety Znajduje się w schemacie użytkownika (czyli jest takim samym obiektem jak np. funkcja) Deklaracje dostępne w zasięgu pakietu maja dostęp do tego co zostało zdefiniowane przed natomiast nie mają dostępu do zadeklarowanych po. Paraser języka przechodzi przez kod tylko raz. Trzeba stosować referencje uprzedzające. Należy użytkownikowi nadać uprawnienia EXECUTE

64 Deklarowanie w bloku

65

66

67 Dostęp do pakietów Zmienne publiczne Typy publiczne Komponenty publiczne (np. funkcje)

68 Tworzenie pakietu

69 CREATE [OR REPLACE] PACKAGE nazwa [AUTH {DEFINER CURREN_USER}] IS [PRAGMA SERIALLY_REUSABLE;] [nazwa_zmiennej [CONSTANT] skalarny_typ_danych [:=wartość];] [nazwa_kolekcji [CONSTANT] typ_danych_kolekcji [:=konstruktor];] [nazwa_obiektu [CONSTANT] obiektowy_typ_danych [:=konstruktor];] [TYPE struktura_rekordów IS RECORD ( nazwa_pola1 typ_danych [,nazwa_pola2 typ_danych,, nazwa_polan typ_danych])] IS instrukcja_select; [TYPE kursor_ref IS REF CURSOR [RETURN {wiersz_katalogu struktura_rekordowa}];] [nazwa_wyjątku_użytkownika EXCEPTION; [PRAGMA EXCEPTION_INIT(nazwa_wyjątku_użytkownika, numer_błędu_oracle);]] [FUNCTION nazwa_funkcji [(parametr1 [IN][OUT] [NOCOPY] typ_danych_sql typ_danych_psql [,parametr2 [IN][OUT] [NOCOPY] typ_danych_sql typ_danych_psql )] RETURN {typ_danych_sql typ_danych_psql} [DETERMINISTIC PARALLEL_ENABLED] [PIPELINED] [RESULT_CACHE [RELIES_ON (nazwa_tabeli) ]];]

70 [PRAGMA RESTRICTED_REFERENCES ({DEFAULT nazwa_funkcji }, Opcja1 [, opcja2, ]);] [PROCEDURE nazwa_procedury [(parametr1 [IN][OUT] [NOCOPY] typ_danych_sql typ_danych_psql [,parametr2 [IN][OUT] [NOCOPY] typ_danych_sql typ_danych_psql )] END nazwa_pakietu; /

71 NOCOPY W Oracle PL/SQL mamy możliwość dwojakiego przetwarzanie parametrów przez funkcję procedury albo przez referencje albo przez wartość W przypadku przetwarzania przez wartość dokonywana jest kopia parametru. Zmieniając wartość zmiennej wewnątrz procedury/funkcji nie widać zmian po wyjściu z niej W przypadku referencji zmiany są widoczne

72 Domyślnie IN przez referencję IN OUT przez wartość OUT przez wartość W przypadku IN OUT i OUT procedura/funkcja zwraca wartości do parametrów pod warunkiem poprawnego zakończenia procedury

73 Za pomocą dyrektywy NOCOPY możemy przekazywać wszystkie parametry do procedury/funkcji przez referencję co może podnieść wydajność w przypadku dużych danych przekazywanych do. UWAGA: wszelkie zmiany są widoczne od razu, nawet jeśli procedura się wykona z błędem. Inaczej: nie ma mowy o ROLLBACK.

74 PRAGMA Dyrektywa kompilatora, wykonywana na poziomie kompilacji a nie wykonania

75 SERIALLY_REUSABLE Pozwala na wykorzystanie pakietu tylko podczas trwania wywołania do serwera. Paczka jeśli jest wykorzystywana ponownie inicjalizuje swoje zmienne i część inicializacyjną Pozwala lepiej zarządzać pamięcią (normalnie paczki pozostają aż do końca sesji) Instrukcje trzeba podać zarówno w specyfikacji paczki jak i w ciele paczki

76

77 Zmienne w pakietach Do zmiennych zadeklarowanych jako stałe nie można przypisywać wartości. Pakiet nie gwarantuje, że drugi użytkownik zastanie ten sam stan (zmienne współdzielone) Jeśli chce się używać obiektów współdzielonych lepiej jest użyć pakiety ze zdefiniowaną wartością do użytku seryjnego (SERIALLY_REUSABLE) Zmienne jeśli nie są publiczne są nadal dostępne w obrębie pakietu.

78

79

80 Podobne zachowanie można uzyskać przez ALTER PACKAGE shared_variables COMPILE SPECYFICATION;

81 Typy danych Dostępne z PL/SQL oraz SQL Mogą być dynamiczne i statyczne %ROWTYPE (pseudotyp) %TYPE (pseudotyp) KURSORY

82 Zmienne Zmienne zadeklarowane w ciele pakietu (BODY) nie są dostępne na zewnątrz

83

84

85 Odwołania do paczki

86 EXECUTE

87 Ogólna składnia EXECUTE ( olap_commands text IN VARCHAR2 OUT VARCHAR2); Może być podanych kilka komend oddzielonych znakami ;

88 %ROWTYPE Zadeklarujmy tablice w Oracle

89

90 Daje nam to możliwość związania typu z danym wierszem Strukturę taką możemy zadeklarować również w sekcji DECLARE Możemy wypełnić tą strukturę Struktura tak nie musi być używana tylko i wyłącznie w paczkach (może być w procedurach,...)

91 %TYPE Podobnie jak poprzednia struktura, z tym że pozwala nam związać zmienną z kolumną col_name table_name.column_name%type; Za pomocą TYPE nazwa_rekordu IS RECORD jesteśmy w stanie zdefiniować sobie dowolną konstrukcję wiersza (fragmentu)

92 PIPELINED Funkcje opatrzone tym słowem kluczowym, można traktować w przybliżeniu jako tabele Pojawiło się od oracle 9i Można stosować bezpośredni do funkcji Można stosować do funkcji w pakietach

93

94

95 RECORD (? OBJECT) W paczce możemy deklarować typy rekordowe, niestety obiektowych nie...

96 Przy okazji SHOW ERRORS

97 Funkcje z PIPELINE mają zastosowanie właśnie w pakietach

98

99 Deklaracje wewnętrzne

100

101 Kursory w pakietach Kursor współdzielony

102

103 Wczytywanie do rekordu Wykorzystanie rekordów Składni OPEN-FOR Silnego typowania Uproszczenie struktury (zawsze można stworzyć widok)

104 Składnia OPEN-FOR Uruchamia zapytanie związane z kursorem Pozwala wczytać do listy Istnieje wersja parametryzowana OPEN-FORUSING

105

106

107

108 Zależności pakietów SELECT name FROM dba_dependencies WHERE referenced_name = 'DBMS_OUTPUT' UNION SELECT referenced_name FROM dba_dependencies WHERE name = 'DBMS_OUTPUT';

109

110

111 Kolekcje SQL dane typu SQL PL/SQL dane typu SQL PL/SQL dane typu PL/SQL Uzupełnienie informacji o możliwościach zmiennych, parametrów funkcji/procedur z poprzedniego wykładu.

112 Dostępne kolekcje w Oracle Tablica VARRAY Tablice asocjacyjne Tabele zagnieżdżone Ogólny podział: listy, tablice

113 Ograniczenia kolekcji Dostępne typy tylko SQL dla SQL Dla SQL możliwość tworzenia kolekcji tylko 1D Dla PL/SQL możliwość tworzenia pseudo wielowymiarowych kolekcji za pomocą rekordów/obiektów Kolekcje (pseudo)wielowymiarowe można pajpować, dzięki temu można ich użyć z poziomu SQL

114 Kolekcje oparte o typ VARRAY Indeksowane za pomocą numerów (, n, n+1, ) Ciągłość indeksowania Określona stała liczba elementów

115 Ogólna definicja TYPE nazwa_typ IS {VARRAY VARYING ARRAY} (rozmiar) OF typ_elementu [NOT NULL] Często nazwa typu zawiera w sobie podciąg VARRAY ułatwiający/porządkujący kod.

116

117

118 Wykorzystanie typów Zmienne w PL/SQL Typy tablicowe

119 Ex1 - wypełnianie

120 Inicjalizowanie VARRAY

121

122

123 EXTEND Może być wywołany bez parametru (1 element) Może być podana liczba nowych elementów Sama inicjalizacja kolekcji nie przydziela miejsca na elementy (co może być trochę mylące, patrząc na definicje i mając nawyki c++, java, ) Funkcja pochodzi z tzw. API Collection dostępnego w Oracle.

124 UWAGA Zwracam uwagę, korzystaliśmy z dwóch możliwości deklaracji kolekcji! Podejście deklarowania typu kolekcji pozwala nam związać ją z pakietem!

125 NULL nie zalecane Jeśli strumieniujemy nasze dane to wartości NULL stanowią poważny problem. Naturalnie istnieje możliwość obsługi takich wartości jednak jeśli nie mamy ku temu powodów lepiej jest stosować strukturę postaci: CREATE OR REPLACE TYPE INTVARRAY AS VARRAY(5) OF INTEGER NOT NULL

126 Co nam to daje?

127 Używanie kolekcji w tabelach Powstaje problem czy taka tabela jest zgodna z zasadami projektowania? Standardowo SQL nie obsługuje rekordów, obiektów, kolekcji W przypadku Oracle można traktować to jako element rozszerzający, będący w zgodzie z normalizacją a pozwalający na większą elastyczność rozwiązań.

128 Kolumna będąca lista standardowo bez rozszerzeń Oracle była by zapisana jako ciąg kolumn tzn. kolumna_typ1, kolumna_typ2, Takie podejście jest niezgodne z normalizacją Powinno zbudować się kolejną tabelę pomocniczą Lub traktując rozszerzenia oracle zbudować kolekcje będącą wierszem UWAGA: Temat jest dyskusyjny, ma swoich zwolenników jak i przeciwników.

129 Muszą być typy SQL

130 Dodawanie

131

132 Dane w takiej postaci nie są atrakcyjne Można rzutować DQL <> DML i select

133 Aby dokonać rzutowania należy utworzyć nowy typ tablicowy (po części zapoznaliśmy się z nim przy strumieniowaniu)

134

135 Aktualizacja kolekcji

136 Update w SQL Wymagana jest aktualizacja całej kolekcji! Można pobrać kolekcje i zmienić jeden element ale może mieć to negatywne skutki jeśli chodzi o wydajność. Aktualizowanie fragmentu kolekcji możliwe jedynie za pomocą PL/SQL

137 Uzupełnienie - sterowanie W części instrukcji sterujących zabrakło instrukcji masowych, to jest uzupełnienie tej części (TODO - przenieść).

138 Instrukcje masowe FOR ALL BULK COLLECT INTO

139 FOR ALL Służy do przesłania z PL/SQL do SQL Składnia FORALL indeks IN dolna_granica..górna_granica wyrażenie_sql; Indeks tylko wewnątrz FORALL i dotyczy kolekcji Instrukcją SQL może być UPDATE, INSERT, DELETE z odwołaniem do kolekcji Pojawia się od wersji 10g

140 BULK COLLECT INTO Pozwala na przeniesienie z SQL do listy PL/SQL Możliwość sczytywania do rekordów z zapytania (kursor niejawny) Za pomocą jawnych kursorów

141 Przykład Najpierw tablica z danymi

142 CONNECT BY Pozwala wybrać dane mające jakiś hierarchiczny związek między sobą PRIOR w konstrukcji: START WITH warunek CONNECT BY [NOCYCLE] warunek, pozwala np.. wylistować strukturę drzewiastą LEVEL pseudokolumna, dla korzenia zwraca 1, potem 2, Klauzula ma znacznie więcej możliwości (możliwe, że do nich wrócimy).

143

144 Tablice asocjacyjne (Index-By Tables) Tablice asocjacyjne to zestawy par kluczwartość Klucz jest unikalny Klucz może być liczbą całkowitą lub literałem Definicja TYPE nazwa IS TABLE OF elementy [INDEX BY (BINARY_INTEGER)];

145

146

147 Dostępne indeksy BINARY_INTEGER PLS_INTEGER VARCHAR2(rozmiar) dostępny od oracle 9

148

149 Wnioski Mamy możliwość dynamicznego tworzenia zestawów Możemy używać kluczy w postaci liczby jak i napisów (!) wartość może wskazywać na dowolny typ Odpowiedni zestaw metod dla kolekcji pozwalający na sprawdzenie czy np.. element istnieje. UWAGA globalizacja i VARCHAR2

150 Tablice zagnieżdżone (nested tables)

151 VARRAY.vs. Nested Tables /pls81016_array_versus_nested_table.gif

152

153

154

155 Przykład Budowanie tablicy asocjacyjnej Sprawdzanie czy element istnieje Iteracja po kluczach

156 Metody kolekcji (tzw. API Collection)

157 Poznane/niepoznane COUNT LIMIT DELETE PRIOR EXISTS TRIM FIRST LAST NEXT EXTEND

158 Operatory/funkcje działające na kolekcjach Operatory/funkcje SET (Operand z IS), CARDINALITY, POWERMULTISET Operatory MULTISET Warunkowe MEMBER OF,SUBMULTISET Operand EMPTY

159 SET Usuwa duplikaty z kolekcji (patrz DISTINCT w SQL) Składnia SET(kolekcja) Jako operand zmienna IS [NOT] A SET

160 CARDINALITY Zlicza elementy kolekcji Nie sprawdza ich niepowtarzalności Przykład > z SET

161 POWERMULTISET Pobiera tablice zagnieżdżoną i zwraca tablice zagnieżdżoną W przypadku gdy podany NULL zwraza NULL W przypadku pustej tablicy błąd Elementy tablicy muszą dawać się porównywać poprzez operatory porównania

162 Operatory MULTISET MULTISET EXCEPT MULTISET INTERSECT MULTISET UNION

163 MULTISET EXCEPT Usuwa przecięcie się zbiorów Najprostsza składnia kolekcja1 MULTISET EXCEPT kolekcja2 Możliwość pracy z ALL/DISTINCT Przykład >>

164 MULTISET INTERSECT Część wspólna zbiorów Przykład >>

165 MULTISET UNION Suma zbiorów (wraz z powtarzającymi się elementami) Przykład >>

166 Porównywanie kolekcji

167 MEMBER OF Operand Sprawdza czy należy do kolekcji zmienna MEMBER OF kolekcja

168 SUBMULTISET Sprawdza czy zbiór jest podzbiorem innego zbioru Składnia: kolekcja SUBMULTISET OF kolekcja Zwraca prawdę jeśli ten sam zbiór z lewej i prawej (każdy zbiór jest swoim podzbiorem patrz teoria cały zbiór jest swoim podzbiorem niewłaściwym ) przykład

169 EMPTY

170 Porównywanie kolekcji W sposób prosty pospolite przyrównanie Sprawdzenie czy jest w jakieś kolekcji (IN) PRZYKŁADY >>

171 TODO Uzupełnienie o kilka funkcji (POWERMULTISET_...)

172 Blokowanie w Oracle Co możemy zablokować? Po co nam blokowanie? Rodzaje blokowania

173 Po co? Kontrola spójności danych przy dostępie wielu użytkowników naraz Konkurencja w bazach danych

174 Ex. Użytkownik 1 dodaje wiersz (np. zarezerwuj hotel) Użytkownik 2 sprawdza czy hotel jest zarezerwowany ( w tym samym czasie ) Użytkownik 2 widzi możliwość rezerwacji Prowadzi to do zamazania informacji o poprzednim użytkowniku lub podwójnej rezerwacji (w zależności od konstrukcji DB)

175 Rodzaje blokowania Automatyczne Manualne

176 Blokowanie automatyczne Oracle blokuje automatycznie dane na poziomie wiersza. Minimalizuje to data block contention (np. w przypadku gdyby cała tabela była zablokowana) Możliwe są dwa typy: exclusive lock używany w przypadku zmiany danych. Tego trybu blokada może być użyta tylko raz w danym czasie w stosunku do zasobów. Drugim typem jest share lock, umożliwiającym odczyt zasobów (istnieje możliwość nałożenia wielu tego typu blokad na zasób w tym samym czasie).

177 data block contention Określa, w przypadku Oracle (można powiedzieć, że jest pewnego rodzaju miarą), jak długo dany blok musi oczekiwać na zakończenie konkurencyjnego zadania pracującego też na tym bloku danych.

178 Transakcje ACID: Atomowość (Atomic) wszystkie SQL zapytania w obrębie transakcji Spójność (Consistent) przed i po zakończeniu transakcji Izolacja (Isolated) transakcje nie mają na siebie wpływu Trwałość (Durable) zmiany po zatwierdzeniu transakcji są zapisywane nawet w przypadku awarii systemu

179 Przykład blokowania automatycznego Transakcja 1 Transakcja 2 SELECT (dane 1) SELECT (dane 1) INSERT UPDATE SELECT (dane 2) COMMIT SELECT (dane 1) SELECT (dane 2)

180 Blokowanie manualne Na poziomie transakcji SET TRANSACTION ISOLATION LEVEL SELECT... FOR UPDATE LOCK TABLE Na poziomie sesji

181 Poziomy izolacji transakcji (zjawiska występujące) Brudny odczyt (dirt reads) Niepowtarzalny odczyt (Nonrepeatable fuzzy ) Fantomy (Phantom reads/phantoms) Definicje: ANSI/ISO SQL (SQL92)

182 Brudny odczyt (dirt reads) Dotyczy czytania przez transakcje elementów zapisanych przez inna transakcje, które ni są jeszcze zatwierdzone. Może zdarzyć się, że druga transakcja cofnie (ROLLBACK) zmiany a pierwsza transakcja pozostanie z nieprawidłowymi danymi (dirty)

183 Niepowtarzalny odczyt (Nonrepeatable fuzzy ) Transakcja pierwsza dokonuje odczytu, transakcja druga dokonuje zmian na odczytanych przez pierwszą (UPDATE/DELETE). Transakcja pierwsza dokonując ponownego odczyty stwierdza, że dane się zmieniły. Nie ma możliwości ponownego odczytania jak na początku (niepowtarzalna).

184 Fantomy (Phantom reads/phantoms) Transakcja pierwsza dokonuje odczytu, transakcja druga dodaje wiersze (spełniające kryteria wyszukiwania pierwszej) (INSERT). Transakcja pierwsza dokonując ponownego odczyty stwierdza, że danych przybyło. Wiersze, które przybyły nazywane są fantomami.

185 Poziomy izolacji Poziom izolacji READ UNCOMMITED READ COMMITED (*) REPEATABLE READ SERIALIZABLE (*) Dirty read + - fuzzy Phantoms (*) - poziomy izolacji obsługiwane przez Oracle, domyślnym poziomem jest READ COMMITED (w SQL SERIALIZABLE, poziom ten jest bardziej czasochłonny)

186 Ustawianie poziomu izolacji transakcji w Oracle SET TRANSACTION ISOLATION LEVEL POZIOM IZOLACJI

187 Ex. SET (RC, S) SELECT SELECT INSERT UPDATE COMMIT SELECT SELECT Porównanie dwóch dostępnych poziomów izolacji)

188 READ ONLY SET TRANSACTION ISOLATION LEVEL READONLY; Pozwala tylko na odczyt danych

189 SELECT... FOR UPDATE Czasami jest potrzeba zablokowania wierszy podczas czytania Baza danych przy składni SELECT FOR UPDATE nakłada exclusive lock na wiersz Odblokowanie następuje poprzez zawołanie ROLLBACK albo COMMIT Możliwość zawężenie SELECT FOR UPDATE OF

190 CURSOR kursor1 IS SELECT * FROM tabela1 WHERE (warunek) FOR UPDATE; CURSOR kursor2 IS SELECT pole1, pole2 FROM winterize WHERE (warunek) FOR UPDATE OF pole1;

191 Ex. TODO (np. z NOWAIT etc.) WHERE CURRENT OF (z przykładem jakby to było ze zwykłym UPDATE i błędem) w kursorze

192 LOCK TABLE LOCK TABLE table [opcje] IN typ_blokowania MODE [NOWAIT]

193 Dostępne są następujące typy blokowania: EXCLUSIVE (tylko SELECT) SHARE (zabrania konkurencji, zezwala na update) SHARE ROW EXCLUSIVE (zabrania SHARE oraz update) ROW SHARE albo SHARE UPDATE (zabrania na exclusive lock) ROW EXCLUSIVE (jak SHARE ale też zabrania dostać SHARE)

194 Blokady domyślne SELECT brak blokad INSERT/UPDATE/DELETE - ROW EXCLUSIVE SELECT...FROM...FOR UPDATE NOWAIT ROW EXCLUSIVE

195 SET TRANSACTION Oracle Database SQL Reference 10g Release 1 (10.1) albo 11g

196 Sesje (TODO) Transakcja SET TRANSACTION ISOLATION LEVEL READ COMMITTED; Sesja ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED;

197 Wykrywanie zakleszczeń (deadlock) Oracle potrafi wykrywać automatycznie zakleszczenia

198 Ex. INSERT A, B COMMIT Sesja 1 Sesja 2 DELETE A DELETE B DELETE A DELETE B Obie sesje czekają na siebie, Oracle przewidział w to miejsce błąd: ORA-00060: deadlock detected while waiting for resource

199 Oracle Lock Management services Odwołania/interfejs znajdują się w pakiecie DBMS_LOCK Pozwala sterować dostępem do terminala Synchronizować Nakładać blokady (na poziomie aplikacji)

200 Poza częścią opisaną znajduje się też w pakiecie funkcja DBMS_LOCK.SLEEP (seconds IN NUMBER); mogąca przydać się przy symulacjach.

201 Dostępne blokady

202 i ich wspólne występowanie

203 Ex. (synchronizacja między sesjami) Tabela z opisem (na pewno coś co pozwoli rozróżnić kiedy został wstawiony wiersz!) 3 sesje Pierwsza nakładająca/zdejmująca blokadę Dwie sesje

204 Plan zapytania explain plan Plan zapytania dotyczy planu jaki stosuje optymalizator Oracle (można odrobinę generalizować) Tyczy się: SELECT, INSERT, UPDATE, DELETE Plan zapytania można odpytywać pod względem różnych statystyk

205 Plan zapytania zawiera informacje o: Kolejność odwołań do tabel Rodzaj dostępu (np. indeksy) Rodzaje złączeń (JOIN) Filtry, agregacje,...

206 W szczegółach informacji mogą znaleźć się informacje o czasie wykonania poszczególnych bloków, czy były wykonane równolegle.

207 Przeglądanie planu zapytania Tabela planu zapytania Tworzenie tabeli Generowanie planu zapytania

208 Tabela planu zapytania Powinniśmy sprawdzić czy znajduje się w bazie danych. np. DESCRIBE plan_table;

209 Tworzenie tabeli planu zapytania W przypadku gdy jej nie ma należy uruchomić skrypt znajdujący się $ORACLE_HOME/RDBMS/ADMIN/UTLXPLA N.SQL W przypadku np. 11g jest to:

210 create table PLAN_TABLE ( statement_id varchar2(30), plan_id number, timestamp date, remarks varchar2(4000), operation varchar2(30), options varchar2(255), object_node varchar2(128), object_owner varchar2(30), object_name varchar2(30), object_alias varchar2(65), object_instance numeric, object_type varchar2(30), optimizer varchar2(255), search_columns number, id numeric, parent_id numeric, depth numeric, position numeric, cost numeric, cardinality numeric, bytes numeric, other_tag varchar2(255), partition_start varchar2(255), partition_stop varchar2(255), partition_id numeric, other long, distribution varchar2(30), cpu_cost numeric, io_cost numeric, temp_space numeric, access_predicates varchar2(4000), filter_predicates varchar2(4000), projection varchar2(4000), time numeric, qblock_name varchar2(30), other_xml clob );

211 Ważniejsze komórki planu zapytania statement_id Operation Options object_name object_type id parent_id position cost

212 Uruchomienie planu zapytania Ogólna składnia EXPLAIN PLAN FOR SQL_Statement Example:

213 Korzystanie z takiego podejścia było by raczej uciążliwe, mamy w tym przypadku tylko jedno zapytanie. Możemy oznaczyć statement_id EXPLAIN PLAN SET STATEMENT_ID = SID FOR SQL_STAT Możliwa jest też zmiana tabeli planu zapytania poprzez składnie INTO

214 Wyświetlanie c.d. Mimo wszystko nadal plan zapytania nie jest zbyt czytelny istnieją dwa podejścia: Skrypty Oracle Tworzenie własnych skryptów

215 Skrypty oracle UTLXPLS.SQL - UTiLity explain Serial plans UTLXPLP.SQL - UTiLity explain Parallel plans Wyświetlają ostatni plan >>> Pokazać pliki (są w notkach)

216

217 Tworzenie własnych skryptów Demo Oracle

218 Uogólnienie formatowanie i automat DBMS_XPLAN.DISPLAY np. SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY( 'plan_table', NULL, 'basic'));

219 Istnieje jeszcze możliwość wyświetlania planu zapytania, które jest przechowywane w kursorze SELECT plan_table_output FROM FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR (NULL, NULL, 'basic'));

220 Typy formatowania BASIC TYPICAL BASIC + (patrz: dwa typy dostępu ACCESS i FILTER) All Możliwość sterowania/dodawania kolumn np. 'basic +cost'; 'All -cost' Informacje dodatkowe +note

221 SQL Developer

222 Ustawienia dodatkowe Możliwość odpalenia planów zapytania od razu SET AUTOTRACE TRACEONLY SET TIMING ON SET AUTOTRACE ON

223 Testowa baza danych Jedna z dostępnych w Oracle jako przykłady Ułatwiają wykorzystanie do celów testowych.

224 CREATE TABLE EMP (EMPNO NUMERIC(4) NOT NULL, ENAME VARCHAR(10), JOB VARCHAR(9), MGR NUMERIC(4), HIREDATE DATETIME, SAL NUMERIC(7, 2), COMM NUMERIC(7, 2), DEPTNO NUMERIC(2)); INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902, '17-DEC-1980', 800, NULL, 20); INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '20-FEB-1981', 1600, 300, 30); INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698, '22-FEB-1981', 1250, 500, 30); INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839, '2-APR-1981', 2975, NULL, 20); INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '28-SEP-1981', 1250, 1400, 30); INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1-MAY-1981', 2850, NULL, 30); INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839, '9-JUN-1981', 2450, NULL, 10); INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566, '09-DEC-1982', 3000, NULL, 20); INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL, '17-NOV-1981', 5000, NULL, 10); INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698, '8-SEP-1981', 1500, 0, 30); INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788, '12-JAN-1983', 1100, NULL, 20); INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698, '3-DEC-1981', 950, NULL, 30); INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566, '3-DEC-1981', 3000, NULL, 20); INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782, '23-JAN-1982', 1300, NULL, 10);

225 CREATE TABLE DEPT (DEPTNO NUMERIC(2), DNAME VARCHAR(14), LOC VARCHAR(13) ); INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');

226 CREATE TABLE BONUS (ENAME VARCHAR(10), JOB VARCHAR(9), SAL NUMERIC, COMM NUMERIC); CREATE TABLE SALGRADE (GRADE NUMERIC, LOSAL NUMERIC, HISAL NUMERIC); INSERT INTO SALGRADE VALUES (1, 700, 1200); INSERT INTO SALGRADE VALUES (2, 1201, 1400); INSERT INTO SALGRADE VALUES (3, 1401, 2000); INSERT INTO SALGRADE VALUES (4, 2001, 3000); INSERT INTO SALGRADE VALUES (5, 3001, 9999);

227 Daty i takie tam... ALTER SESSION SET NLS_DATE_LANGUAGE= 'AMERICAN'; select sysdate, TO_DATE('17-DEC-1980', 'DD-MON-YYYY') from dual; INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902, TO_DATE('17-DEC-1980','DD-MON-YYYY'), 800, NULL, 20); - - Lub ustawiając w pełni jeszcze NLS_DATE_FORMAT= 'DD-MON-RR'

228 Przykłady planów zapytania

229 Iloczyn kartezjański

230

231 Czytanie planu zapytań Można sobie wyobrazić plan zapytań w postaci drzewa MERGE JOIN (1) BUFFER (3) TABLE ACCESS (2) TABLE ACCESS (4)

232 Tworzenie odbywa się zgodnie z kluczami ID, PARENT_ID Następnie czytamy idąc od najbardziej lewego, wykonane operacje

233 MERGE JOIN (1) BUFFER (3) TABLE ACCESS (2) TABLE ACCESS (4) Co oznacza, że najpierw została wykonana operacja TA (2), następnie TA(4) po czym została zbuforowana (3) finalnie zostały złączone (4)

234 Czyli okazuje się (to czego się spodziewaliśmy), że zapytanie w postaci iloczynu kartezjańskiego przeczyta nam w pełni obie tabele i dokona złączenia każdego wiersza z każdym.

235 Iloczyn kartezjański warunek Pozbyliśmy się buforowania i mamy złączenie HASH JOIN jednak nadal pełen dostęp do tabel

236 Z JOIN

237 Wygląda na to, że wszystkie zapytania wyglądają tak samo?!!!!!!!! Czego brakuje? KLUCZE, INDEKSY

238

239 OPTYMALIZATOR ZADZIAŁAŁ!!

240 BEZ OPTYMALIZATORA

241

242 Optymalizator Pamiętajmy, że optymalizator nie zawsze musi być obecny! Niektóre bazy mają bardzo prosty optymalizator. Optymalizator nie zawsze musi zadziałać po naszej myśli

243 Porównanie z MySQL

244 Polecenie EXPLAIN w MYSQL

245 * GWIAZDKA!!

246

247 TODO Możliwość oceny dodatkowej analizy liczności wierszy

248 c.d. Plan zapytania optymalizator Przykład analizy bardziej złożonego przykładu Możliwości wpływu na wykonywane zapytanie nie tylko od strony SQL ale i optymalizatora

249 Przykład Struktura: Tematy Posty Rodzaje postów (np. przylepiony)

250 Zapytanie do postów Iloczyn kartezjański OUTER JOIN LEFT/RIGHT OUTER JOIN... ON

251 Możliwe drogi zapytania

252 Pętle zagnieżdżone SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno;

253 Złączenie z odwróconym sortowaniem (Sort-merge join) SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno;

254 Cluster Join SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno;

255 Hash Join SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno;

256 Trace Jedna z metod

257 Przykłady Podpowiedzi/ hintów dla optymalizatora W przykładach LIVE

258 Błędy optymalizatora Mała zbiór wartości o dużej liczebności w dużym zbiorze wartości o małej liczebności Złączenia tabel o małej liczebności z tabelami o dużej liczebności (raczej nie dotyczy Oracle) Błędy z dystrybucją (>histogram)...

259 Podsumowanie To mikroskopijny wycinek wiedzy Programy do analizy zapytań (najczęściej komercyjne) Książki z serii SQL Tuning Dodatkowo Tuning na poziomie samego serwera DB

260 Wyjątki Zasięg Przechwytywanie Deklaracja Rzucanie Deklaracja dodatkowych parametrów (nazwa, numer)

261 Zasięg wyjątków Błędy kompilacji Te wyjątki pojawiają się w czasie kompilacji, zatem są wychwycone już w czasie tworzenia aplikacji. (Najczęściej brak średnika) Błędy czasu wykonania Wyjątki tego typu powstają podczas wykonania i mogą zależeć od wielu czynników, mogą też wystąpić w wielu sekcji PL/SQL. Zostaną omówione dalej.

262 Możliwość przechwycenia wyjątku w zależności od jego wystąpienia DECLARE -- Sekcja deklaracji. BEGIN Sekcja wykonawcza... EXCEPTION -- Sekcja obsługi wyjątków END:

263 Sekcja deklaracji Przechwycenie możliwe na zewnątrz Sekcja wykonawcza Przekazana do lokalnej sekcji obsługi wyjątków Możliwość obsługi w sekcji obsługi wyjątków Jeśli nie są obsłużone przekazywane są dalej Sekcja obsługi wyjątku Przechwycenie możliwe na zewnątrz

264 Konstrukcja sekcji przechwycenia i wywołania wyjątku DECLARE. E EXCEPTION; BEGIN. RAISE E; EXCEPTION WHEN (nazwa_wyjatku) THEN. END;

265 Nazwy wyjątków SQLCODE wyjątki zdefiniowane przez Oracle, zwraca opis wyjątku SQLERRM zwraca opis w zależności od parametru, może zwracać opis spoza definicji Oracle Możliwość definicji wyjątków własnych

266 Kilka wyjątków predefiniowanych ACCESS_INTO_NULL CURSOR_ALREADY_OPEN VALUE_ERROR ZERO_DIVIDE Więcej w dokumentacji

267 Przykłady

268 Błąd w sekcji wykonania DECLARE L1 INTEGER := 2; L2 VARCHAR(2) := 0; BEGIN L1 := L1/L2; EXCEPTION WHEN ZERO_DIVIDE THEN DBMS_OUTPUT.PUT_LINE('Blad dzielenia' SQLCODE); END; /

269 Funkcje błędów DECLARE code NUMBER; errm VARCHAR2(200); BEGIN NULL; code := SQLCODE; errm := SQLERRM; dbms_output.put_line(code ' - ' errm); END; /

270 Wywołanie wyjątku bez obsługi w bloku BEGIN RAISE ACCESS_INTO_NULL; END; /

271 BEGIN RAISE ACCESS_INTO_NULL; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Zlapanie dowolnego wyjatku'); END; /

272 BEGIN RAISE ACCESS_INTO_NULL; EXCEPTION WHEN ACCESS_INTO_NULL THEN DBMS_OUTPUT.PUT_LINE('Zlapanie wyjatku ACCESS_INTO_NULL'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Zlapanie dowolnego wyjatku'); END; /

273 Wyjątek przechwycony w bloku zewnętrznym BEGIN DECLARE V INTEGER; BEGIN SELECT 1 INTO V FROM DUAL WHERE 1 <> 1; EXCEPTION WHEN ACCESS_INTO_NULL THEN DBMS_OUTPUT.PUT_LINE('Zlapanie wyjatku ACCESS_INTO_NULL'); END; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Zlapanie dowolnego wyjatku'); END; /

274 Błąd w sekcji obsługi wyjątku BEGIN DECLARE V INTEGER; E EXCEPTION; BEGIN RAISE E; EXCEPTION WHEN ACCESS_INTO_NULL THEN SELECT 1 INTO V FROM DUAL WHERE 1 <> 1; DBMS_OUTPUT.PUT_LINE('Zlapanie wyjatku ACCESS_INTO_NULL'); END; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Zlapanie dowolnego wyjatku'); END; /

275 cd BEGIN DECLARE V INTEGER; E EXCEPTION; BEGIN RAISE E; EXCEPTION WHEN ACCESS_INTO_NULL THEN DBMS_OUTPUT.PUT_LINE('Zlapanie wyjatku ACCESS_INTO_NULL'); SELECT 1 INTO V FROM DUAL WHERE 1 <> 1; - - zamienione miejscami! END; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Zlapanie dowolnego wyjatku'); END; /

276 Wyjątek w sekcji deklaracji BEGIN DECLARE V VARCHAR(1) := 'AB'; BEGIN NULL; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Zlapanie wyjatku wewnatrz'); END; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Zlapanie wyjatku na zewnatrz'); END; /

277 Własne wyjątki Mamy możliwość deklarowania poprzez EXCEPTION (w pewien sposób w obrębie deklaracji), ograniczone możliwości komentarzy... PRAGMA EXCEPTION_INIT pozwala o komentować poprzedni wyjątek i nadać mu numer RAISE_APPLICATION_ERROR dynamiczny wyjątek

278 DECLARE moj EXCEPTION; BEGIN RAISE moj; EXCEPTION WHEN moj THEN DBMS_OUTPUT.PUT_LINE('Zlapanie wyjatku moj'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Zlapanie wyjatku innego'); END; /

279 EXCEPTION_INIT Konstrukcja PRAGMA EXCEPTION_INIT(exception_name, -Oracle_error_number); np. dla bledu ORA numeric or value error będzie to ale może być to błąd np. 60 (dedlock detect) nie majacy odpowiednika Pozwala to zdefiniować błąd który istnieje w oracle a nie ma predefinowanego typu

280 DECLARE moj EXCEPTION; PRAGMA EXCEPTION_INIT(moj, -60); BEGIN RAISE moj; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Zlapanie wyjatku: ' SQLERRM); END; /

281 RAISE_APPLICATION_ERROR Konstrukcja raise_application_error(error_number, message[, {TRUE FALSE}]); error_number - wartość z przedziału Komunikat może mieć 2048 bajtów Opcjonalny parametr pozwala albo na umieszczanie albo nie błędów na stosie poprzednich wywołań

282 BEGIN RAISE_APPLICATION_ERROR(-20000, 'Jakis blad'); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Zlapanie wyjatku: ' SQLERRM); END; /

283 DECLARE jakis EXCEPTION; PRAGMA EXCEPTION_INIT(jakis, ); BEGIN RAISE_APPLICATION_ERROR(-20000, 'Jakis blad'); EXCEPTION WHEN jakis THEN DBMS_OUTPUT.PUT_LINE('Zlapanie jakiegos: ' SQLERRM); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Zlapanie wyjatku: ' SQLERRM); END; /

284 Ponowne wymuszenie DECLARE e EXCEPTION; BEGIN... BEGIN... RAISE e; EXCEPTION WHEN e THEN RAISE; -- tu nastąpi ponowne wywolanie watku (sprawdzic linijki kodu, komentarz) END; EXCEPTION WHEN e THEN... END;

285 Nie ma opcji wyskoczenia z wyjątku!! ( i dobrze) DECLARE E EXCEPTION; BEGIN RAISE E; <<etykieta_goto>> DBMS_OUTPUT.PUT_LINE('Za etykieta'); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Wyjatek'); GOTO etykieta_goto; END;

286 Formatowanie błędów Możliwość formatowania wyjątków DBMS_UTILITY.FORMAT_ERROR_STACK DBMS_UTILITY.FORMAT_CALL_STACK

287 DECLARE E EXCEPTION; BEGIN RAISE E; EXCEPTION WHEN OTHERS THEN -- UWAGA, funkcja PUT_LINE ma ograniczenia, stack moze zwrocic wiecej znakow! DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_STACK); END;

288 Pola LOB, etc. Large Objects LOB BLOB CLOB NCLOB Zabezpieczenia (od 11g)

289 LOB znakowe Maksymalny rozmiar (128 Tb), związany z wielkością bloku (tak więc domyślnie może być mniejszy) Typ CLOB jest typem obiektowym, a zatem wymaga operacji standardowych dla takich typów w Oracle (istnieje funkcja empty_clob() - a dokładniej jest to konstruktor)

290 Możliwe stany obiektu clob_null CLOB; clob_pusty CLOB := empty_clob(); clob_dane CLOB := 'TEKST';

291 Ograniczenia na rozmiar Mimo możliwości przechowywania bardzo dużych danych w polach CLOB(itp.) narzucone są ograniczenia ze strony funkcji konwertujących i tak w SQL nie można przekonwertować więcej niż 4000 znaków a w PL/SQL znaków. Aby móc przechowywać większe ilości danych należy używać lokalizatora

292 Tworzenie i zarządzanie dużymi obiektami INSERT INTO tabela (pole_clob) VALUES (empty_clob()) RETURNING pole_clob INTO zmienna_clob Następnie można, mając lokalizator w zmienna_clob, dodać dane to wybranego pola. Podobnie realizuje się to w przypadku UPDATE

293 LOB w przypadku PL/SQL W tej sytuacji powinniśmy mieć utworzoną strukturę na poziomie bazy danych ORACLE Można tego dokonać za pomocą CREATE DIRECTORY

294 Tablica z danymi

295 Pakiet DBMS_LOB Obsługa pól LOB, plików,...

296

297

298

299

300 Przy takim podejściu mamy duże ograniczenia wynikające z wielkości zapytania SQL'owego Należy zastosować rozwiązania bazujące na pobraniu identyfikatora danych, któe chcemy wstawić.

301

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL; 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

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

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

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

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

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

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

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 7 Dynamiczny SQL i PL/SQL Pierwotny dynamiczny SQL Pierwotny dynamiczny DDL Pierwotny dynamiczny DML i SELECT Pakiet DBMS_SQL Transakcje

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

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 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

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

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia). POZIOMY IZOLACJI TRANSAKCJI 1. Microsoft SQL Server 2012 (od SQL Server 2005) W systemie SQL Server można wybrać sposób sterowania współbieżnością. Podstawowy sposób to stosowanie blokad. Wykorzystywane

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

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

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

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

Oracle11g: Programowanie w PL/SQL

Oracle11g: Programowanie w PL/SQL Oracle11g: Programowanie w PL/SQL OPIS: Kurs pozwala zrozumieć zalety programowania w języku PL/SQL. Studenci uczą się tworzyć bloki kodu wykonywanego po stronie serwera, który może być współużytkowany

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

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 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

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

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

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

Zaawansowane bazy danych i hurtownie danych semestr I

Zaawansowane bazy danych i hurtownie danych semestr I Podprogramy Wydział Informatyki Politechnika Białostocka Zaawansowane bazy danych i hurtownie danych semestr I Procedury do przeprowadzenia akcji Funkcje do obliczania wartości Pakiety do zbierania logicznie

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

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

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

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

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

Oracle10g: Programowanie w PL/SQL

Oracle10g: Programowanie w PL/SQL Oracle10g: Programowanie w PL/SQL OPIS: Szkolenie dotyczy użytkowników Oracle8i, Oracle9i i Oracle10g. Ten kurs pozwala zrozumieć zalety tego potężnego narzędzia programowania do PL/SQL. Studenci uczą

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

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

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

Microsoft SQL Server Podstawy T-SQL

Microsoft SQL Server Podstawy T-SQL Itzik Ben-Gan Microsoft SQL Server Podstawy T-SQL 2012 przełożył Leszek Biolik APN Promise, Warszawa 2012 Spis treści Przedmowa.... xiii Wprowadzenie... xv Podziękowania... xix 1 Podstawy zapytań i programowania

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

Ć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

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

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

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, 2016 Spis treści Wprowadzenie Podziękowania xiii xvii 1 Podstawy zapytań i programowania T-SQL 1 Podstawy

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

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 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

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, 2017 Spis treści O autorze 9 Wprowadzenie 11 Lekcja 1. Zrozumieć SQL 15 Podstawy baz danych 15 Język SQL

Bardziej szczegółowo

Oracle11g: Wprowadzenie do SQL

Oracle11g: Wprowadzenie do SQL Oracle11g: Wprowadzenie do SQL OPIS: Kurs ten oferuje uczestnikom wprowadzenie do technologii bazy Oracle11g, koncepcji bazy relacyjnej i efektywnego języka programowania o nazwie SQL. Kurs dostarczy twórcom

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

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

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

Technologie baz danych

Technologie baz danych Plan wykładu Technologie baz danych Wykład 6: Algebra relacji. SQL - cd Algebra relacji operacje teoriomnogościowe rzutowanie selekcja przemianowanie Małgorzata Krętowska Wydział Informatyki Politechnika

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

1 Przetwarzanie transakcyjne Cechy transakcji Rozpoczęcie i zakończenie Punkty bezpieczeństwa... 3

1 Przetwarzanie transakcyjne Cechy transakcji Rozpoczęcie i zakończenie Punkty bezpieczeństwa... 3 Plan wykładu Spis treści 1 Przetwarzanie transakcyjne 1 1.1 Cechy transakcji................................. 2 1.2 Rozpoczęcie i zakończenie........................... 3 1.3 Punkty bezpieczeństwa.............................

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

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

Ćwiczenia 2 IBM DB2 Data Studio

Ćwiczenia 2 IBM DB2 Data Studio Ćwiczenia 2 IBM DB2 Data Studio Temat: Aplikacje w Data Studio 1. Projekty Tworzenie procedur, UDF, trygerów zaczynamy od utworzenia projektu File -> New -> Project wybieramy Data Development Project.

Bardziej szczegółowo

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach 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

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

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy]; Widoki/Perspektywy Podstawy Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy]; Usuwanie widoku DROP VIEW [nazwa_widoku]; Przykład 1 Przykład najprostszego

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

Podprogramy. Rozdział 11 Procedury i funkcje składowane

Podprogramy. Rozdział 11 Procedury i funkcje składowane Podprogramy Rozdział 11 Procedury i funkcje składowane Podprogramy, procedury składowane, funkcje składowane, wywoływanie podprogramów Przez podprogramy rozumiemy głównie: procedury (wykonują określone

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 12c: Nowości w SQL i PL/SQL

Oracle 12c: Nowości w SQL i PL/SQL Oracle 12c: Nowości w SQL i PL/SQL Marek Wojciechowski Politechnika Poznańska, PLOUG Nowe możliwości w klauzuli DEFAULT Odwołania do sekwencji Obsługa jawnie wstawianych wartości NULL Wartości na poziomie

Bardziej szczegółowo

przykłady problemów; realizacja dostaw części od producenta do klienta:

przykłady problemów; realizacja dostaw części od producenta do klienta: Przetwarzanie transakcyjne Transakcja zestaw operacji pod szczególną kontrolą transakcja to sekwencja operacji, która musi zakończyć się sukcesem w całości - w przeciwnym wypadku musi powrócić stan początkowy

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 6 Wprowadzenie Definiowanie wyzwalaczy DML Metadane wyzwalaczy Inne zagadnienia, tabele mutujące Wyzwalacze INSTEAD OF Wyzwalacze

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

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

Materiały do laboratorium MS ACCESS BASIC

Materiały do laboratorium MS ACCESS BASIC Materiały do laboratorium MS ACCESS BASIC Opracowała: Katarzyna Harężlak Access Basic jest językiem programowania wykorzystywanym w celu powiązania obiektów aplikacji w jeden spójny system. PROCEDURY I

Bardziej szczegółowo

Plan wykładu BAZY DANYCH II WYKŁAD 7. Pakiety. Zalety pakietów 2011-01-13

Plan wykładu BAZY DANYCH II WYKŁAD 7. Pakiety. Zalety pakietów 2011-01-13 Plan wykładu BAZY DANYCH II WYKŁAD 7 Pakiety: specyfikacja, ciało, Wywoływanie elementów pakietów, Przeciążanie podprogramów z pakietów, Inicjowanie pakietów, Deklaracje uprzedzające, Funkcje pakietowe

Bardziej szczegółowo

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

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze Funkcje użytkownika Tworzenie funkcji Usuwanie funkcji Procedury składowane Tworzenie procedur składowanych Usuwanie procedur składowanych Wyzwalacze Wyzwalacze a ograniczenia i procedury składowane Tworzenie

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

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

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

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

Bazy danych. Plan wykładu. Złczenia tabel. Perspektywy cd. Wykład 9: Programowanie aplikacji baz danych po stronie serwera. Sekwencje Wyzwalacze

Bazy danych. Plan wykładu. Złczenia tabel. Perspektywy cd. Wykład 9: Programowanie aplikacji baz danych po stronie serwera. Sekwencje Wyzwalacze Plan wykładu Bazy danych Wykład 9: Programowanie aplikacji baz danych po stronie serwera Sekwencje Wyzwalacze Bloki anonimowe Funkcje Procedury Pakiety Małgorzata Krtowska Katedra Oprogramowania e-mail:

Bardziej szczegółowo

Bazy Danych II. Ćwiczenia

Bazy Danych II. Ćwiczenia Bazy Danych II. Ćwiczenia Bartosz Zieliński 16 kwietnia 2011 Spis treści 1 Powtórzenie SQL 3 1.1 Tworzenie i usuwanie tabel........................ 3 1.2 Wstawianie danych do tabel........................

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

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

PRZESTRZENNE BAZY DANYCH WYKŁAD 2 PRZESTRZENNE BAZY DANYCH WYKŁAD 2 Baza danych to zbiór plików, które fizycznie przechowują dane oraz system, który nimi zarządza (DBMS, ang. Database Management System). Zadaniem DBMS jest prawidłowe przechowywanie

Bardziej szczegółowo

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1 Bazy danych Wykład IV SQL - wprowadzenie Copyrights by Arkadiusz Rzucidło 1 Czym jest SQL Język zapytań deklaratywny dostęp do danych Składnia łatwa i naturalna Standardowe narzędzie dostępu do wielu różnych

Bardziej szczegółowo

Transakcje jednocześnie ACID

Transakcje jednocześnie ACID Transakcje Transakcja to zbiór operacji (u nas - instrukcji języka SQL), które mogą być wykonane jedynie wszystkie lub żadna. Nazwa takiego ciągu instrukcji pochodzi od operacji bankowych - przelew musi

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

Obowiązuje od wersji

Obowiązuje od wersji Obowiązuje od wersji 8.30.0 1. Wstęp czym są gniazda rozszerzeń?... 2 2. Edytor gniazd rozszerzeń - informacje podstawowe... 3 3. Dostępne rodzaje funkcji w gniazdach rozszerzeń... 6 3.1 Procedura SQL...

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

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

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

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 1 Wprowadzenie Dostęp do bazy danych Program SQL*Plus Podstawy PL/SQL - 2 - Wprowadzenie Dlaczego warto uczyć się o Oracle u? Oracle

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

Podstawy programowania III WYKŁAD 2

Podstawy programowania III WYKŁAD 2 Podstawy programowania III WYKŁAD 2 Jan Kazimirski 1 Komunikacja z bazami danych 2 PHP i bazy danych PHP zapewnia dostęp do wielu popularnych baz danych. Kilka poziomów abstrakcji: Funkcje obsługujące

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