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 typ [( )] [ NOT NULL ] [ { := DEFAULT } ];

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ć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

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

Ć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

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

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

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

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

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

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

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

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

Wstęp wprowadzający do laboratorium 2. mgr inż. Rafał Grycuk

Wstęp wprowadzający do laboratorium 2. mgr inż. Rafał Grycuk Wstęp wprowadzający do laboratorium 2 mgr inż. Rafał Grycuk Plan prezentacji 1. Czym jest T-SQL i czym się różni od standardu SQL 2. Typy zapytań 3. Zapytanie typu SELECT 4. Słowo o indeksach T-SQL (1)

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

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

Zbiór pytań nr 5. 2 Które stwierdzenie opisuje najlepiej zbiór uprawnień dostępny po wykonaniu

Zbiór pytań nr 5. 2 Które stwierdzenie opisuje najlepiej zbiór uprawnień dostępny po wykonaniu Zbiór pytań nr 5 1 Które stwierdzenie opisuje najlepiej zbiór uprawnień dostępny po wykonaniu connect athos/musketeer grant select,insert,update,delete on athos.services to porthos with grant option; grant

Bardziej szczegółowo

- 307 W Oracle instrukcja SELECT Ename FROM Emp WHERE Empno=4567: [ ] zakłada blokadę do odczytu dla jednego wiersza tabeli Emp [ ] zakłada blokadę

- 307 W Oracle instrukcja SELECT Ename FROM Emp WHERE Empno=4567: [ ] zakłada blokadę do odczytu dla jednego wiersza tabeli Emp [ ] zakłada blokadę - 307 W Oracle instrukcja SELECT Ename FROM Emp WHERE Empno=4567: [ ] zakłada blokadę do odczytu dla jednego wiersza tabeli Emp [ ] zakłada blokadę do odczytu dla wszystkich wierszy tabeli Emp [ ] zakładę

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

Podstawy języka SQL Co to jest SQL? Możliwości SQL SQL*Plus

Podstawy języka SQL Co to jest SQL? Możliwości SQL SQL*Plus Podstawy języka SQL Co to jest SQL? Structured Query Language uchodzi za standard języka zapytań kierowanych do systemu zarządzania bazą danych. SQL jest językiem deklaratywnym tj. takim, w którym istotne

Bardziej szczegółowo

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi 1 Rozdział 1 Wprowadzenie do PHP i MySQL Opis: W tym rozdziale kursanci poznają szczegółową charakterystykę

Bardziej szczegółowo

Bazy danych 2 Laboratorium 2

Bazy danych 2 Laboratorium 2 Język PLSQL: złożony język programowania, dzięki któremu mamy możliwość uzyskać dostęp do bazy danych Oracle z różnych środowisk; jest to język zintegrowany z serwerem bazy danych, co ma wpływ na szybkość

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

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl Bazy danych Podstawy języka SQL Dr inż. Paweł Kasprowski pawel@kasprowski.pl Plan wykładu Relacyjne bazy danych Język SQL Zapytania SQL (polecenie select) Bezpieczeństwo danych Integralność danych Współbieżność

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

Ada-95. Dariusz Wawrzyniak

Ada-95. Dariusz Wawrzyniak Część I Wskaźniki Plan Typy wskaźnikowe i obiekty wskazywane 1 Typy wskaźnikowe i obiekty wskazywane 2 3 4 Plan Typy wskaźnikowe i obiekty wskazywane 1 Typy wskaźnikowe i obiekty wskazywane 2 3 4 Wskaźniki

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

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi 1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) Tworząc tabelę nie możemy określić, do którego pliku trafi, lecz możemy określić do której grupy plików trafi Zawsze istnieje grupa zawierająca

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

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

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

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

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze 1 Funkcje i procedury pamiętane Następujące polecenie tworzy zestawienie zawierające informację o tym ilu jest na naszej hipotetycznej

Bardziej szczegółowo

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych Szkolenie przeznaczone jest dla osób chcących poszerzyć swoje umiejętności o tworzenie rozwiązań internetowych w PHP. Zajęcia zostały przygotowane w taki sposób, aby po ich ukończeniu można było rozpocząć

Bardziej szczegółowo

Kiedy i czy konieczne?

Kiedy i czy konieczne? Bazy Danych Kiedy i czy konieczne? Zastanów się: czy często wykonujesz te same czynności? czy wielokrotnie musisz tworzyć i wypełniać dokumenty do siebie podobne (faktury, oferty, raporty itp.) czy ciągle

Bardziej szczegółowo

Tworzenie raportów XML Publisher przy użyciu Data Templates

Tworzenie raportów XML Publisher przy użyciu Data Templates Tworzenie raportów XML Publisher przy użyciu Data Templates Wykorzystanie Szablonów Danych (ang. Data templates) jest to jedna z metod tworzenia raportów w technologii XML Publisher bez użycia narzędzia

Bardziej szczegółowo

Monika Kruk Mariusz Grabowski. Informatyka Stosowana WFiIS, AGH 13 grudzień 2006

Monika Kruk Mariusz Grabowski. Informatyka Stosowana WFiIS, AGH 13 grudzień 2006 OBIEKTOWOŚĆ W BAZIE DANYCH ORACLE Monika Kruk Mariusz Grabowski Informatyka Stosowana WFiIS, AGH 13 grudzień 2006 Plan prezentacji kilka słów o bazie danych ORACLE rzecz o obiektach ORACLE tworzenie typów

Bardziej szczegółowo

Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/

Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/ Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/ Wprowadzenie Historia i standardy Podstawy relacyjności Typy danych DDL tabele, widoki, sekwencje zmiana struktury DML DQL Podstawy, złączenia,

Bardziej szczegółowo

Pawel@Kasprowski.pl Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Pawel@Kasprowski.pl Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07 PHP i bazy danych Paweł Kasprowski pawel@kasprowski.pl Użycie baz danych Bazy danych używane są w 90% aplikacji PHP Najczęściej jest to MySQL Funkcje dotyczące baz danych używają języka SQL Przydaje się

Bardziej szczegółowo

Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski. Poznań, 30.09.2015

Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski. Poznań, 30.09.2015 Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski Poznań, 30.09.2015 Plan Geneza Architektura Cechy Instalacja Standard SQL Transakcje i współbieżność Indeksy Administracja Splice Machince vs.

Bardziej szczegółowo

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli.

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli. SQL W JĘZYKU PL/SQL Strukturalny język zapytań SQL określa sposób manipulowania danymi w bazie danych. Konstrukcje proceduralne języka PL/SQL stają się bardziej użyteczne w połączeniu z mocą przetwarzania

Bardziej szczegółowo

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9 Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9 Tabele 9 Klucze 10 Relacje 11 Podstawowe zasady projektowania tabel 16 Rozdział 2. Praca z tabelami 25 Typy danych 25 Tworzenie tabel 29 Atrybuty kolumn

Bardziej szczegółowo

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Wprowadzenie do projektowania i wykorzystania baz danych Relacje Wprowadzenie do projektowania i wykorzystania baz danych Relacje Katarzyna Klessa Dygresja nt. operatorów SELECT 2^2 SELECT 2^30 SELECT 50^50 2 Dygresja nt. operatorów SELECT 2^30 --Bitwise exclusive OR

Bardziej szczegółowo

Marek Rakowski Podstawy zdania SELECT Strona 1 z 12

Marek Rakowski Podstawy zdania SELECT Strona 1 z 12 Marek Rakowski Podstawy zdania SELECT Strona 1 z 12 Podstawy języka SQL Co to jest SQL? Structured Query Language uchodzi za standard języka zapytań kierowanych do systemu zarządzania bazą danych. SQL

Bardziej szczegółowo

SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE

SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE Instrukcje SQL dzielimy na następujące kategorie: 1) Instrukcje języka manipulowania danymi (DML) SELECT, INSERT, UPDATE, DELETE, SET TRANSACTION, EXPLAIN PLAN 2) Instrukcje języka definicji danych DDL

Bardziej szczegółowo

PL/SQL. Zaawansowane tematy PL/SQL

PL/SQL. Zaawansowane tematy PL/SQL PL/SQL Zaawansowane tematy PL/SQL Cele Przypomnienie kursorów Przypomnienie procedur i funkcji składowanych Poznanie pakietów składowanych 2 Bazę danych Oracle możemy traktować jakby była złożona z dwóch

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 4 Wsady Procedury składowane Procedury składowane tymczasowe, startowe Zmienne tabelowe Funkcje

Bardziej szczegółowo

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli SPOOL moj_plik SPOOL OFF @ moj_ plik edit CREATE TABLE DESCRIBE ALTER TABLE RENAME DROP TABLE CONNECT CONNECT USER_NAME DISCONNECT EXIT zapisuje wszystkie wydane polecenia oraz ich wyniki do pliku moj_plik,

Bardziej szczegółowo

Materiały szkoleniowe. Podstawy języka SQL

Materiały szkoleniowe. Podstawy języka SQL Materiały szkoleniowe Podstawy języka SQL Spis treści Zawartość tabel wykorzystywanych na kursie... 4 Zawartość tabeli DEPT...5 Zawartość tabeli EMP...5 Zawartość tabeli SALGRADE...5 Budowa tabel wykorzystywanych

Bardziej szczegółowo

Administracja bazami danych

Administracja bazami danych Administracja bazami danych dr inż. Grzegorz Michalski Na podstawie wykładów dra inż. Juliusza Mikody Klient tekstowy mysql Program mysql jest prostym programem uruchamianym w konsoli shell do obsługi

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

Uprawnienia, role, synonimy

Uprawnienia, role, synonimy Uprawnienia, role, synonimy Schemat, użytkownicy, autoryzacja użytkowników, uprawnienia systemowe i obiektowe, nadawanie i odbieranie uprawnień, tworzenie ról, przywileje, synonimy Schematy i użytkownicy

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

Hurtownia Świętego Mikołaja projekt bazy danych

Hurtownia Świętego Mikołaja projekt bazy danych Aleksandra Kobusińska nr indeksu: 218366 Hurtownia Świętego Mikołaja projekt bazy danych Zaprezentowana poniżej baza jest częścią większego projektu bazy danych wykorzystywanej w krajowych oddziałach wiosek

Bardziej szczegółowo

Rozproszone bazy danych 3

Rozproszone bazy danych 3 Rozproszone bazy danych 3 Optymalizacja zapytań rozproszonych Laboratorium przygotował: Robert Wrembel ZSBD laboratorium 3 (1) 1 Plan laboratorium Zapytanie rozproszone i jego plan wykonania Narzędzia

Bardziej szczegółowo

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota Laboratorium nr 3 1 Bazy Danych Instrukcja laboratoryjna Temat: Wprowadzenie do języka SQL, tworzenie, modyfikacja, wypełnianie tabel 3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota 1)

Bardziej szczegółowo

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych Plan wykładu Bazy danych Cechy rozproszonej bazy danych Implementacja rozproszonej bazy Wykład 15: Rozproszone bazy danych Małgorzata Krętowska, Agnieszka Oniśko Wydział Informatyki PB Bazy danych (studia

Bardziej szczegółowo

BAZY DANYCH Cz III. Transakcje, Triggery

BAZY DANYCH Cz III. Transakcje, Triggery BAZY DANYCH Cz III Transakcje, Triggery Transakcje Definicja: Zbiór operacji (modyfikacja danych, usuwanie, wstawianie, tworzenie obiektów bazodanowych), które albo wszystkie kończone są sukcesem, albo

Bardziej szczegółowo

Internetowe bazy danych

Internetowe bazy danych Wyższa Szkoła Technologii Teleinformatycznych w Świdnicy Internetowe bazy danych wykład 3 dr inż. Jacek Mazurkiewicz e-mail: Jacek.Mazurkiewicz@pwr.wroc.pl Typy tabel MySQL domyślny MyISAM inne możliwe:

Bardziej szczegółowo

Ref. 7 - Język SQL - polecenia DDL i DML

Ref. 7 - Język SQL - polecenia DDL i DML Ref. 7 - Język SQL - polecenia DDL i DML Wprowadzenie do języka SQL. Polecenia generujące strukturę bazy danych: CREATE, ALTER i DROP. Polecenia: wprowadzające dane do bazy - INSERT, modyfikujące zawartość

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

Języki skryptowe w programie Plans

Języki skryptowe w programie Plans Języki skryptowe w programie Plans Warsztaty uŝytkowników programu PLANS Kościelisko 2010 Zalety skryptów Automatyzacja powtarzających się czynności Rozszerzenie moŝliwości programu Budowa własnych algorytmów

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 3 Podstawy programowania w T-SQL Zmienne i operatory Instrukcje sterujące Komunikaty Format daty

Bardziej szczegółowo

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

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia? D D L S Q L Co to jest DDL SQL i jakie s jego ą podstawowe polecenia? D D L S Q L - p o d s t a w y DDL SQL (Data Definition Language) Jest to zbiór instrukcji i definicji danych, którym posługujemy się

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Modelowanie hierarchicznych struktur w relacyjnych bazach danych Modelowanie hierarchicznych struktur w relacyjnych bazach danych Wiktor Warmus (wiktorwarmus@gmail.com) Kamil Witecki (kamil@witecki.net.pl) 5 maja 2010 Motywacje Teoria relacyjnych baz danych Do czego

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

Bazy danych. Dr inż. Paweł Kasprowski

Bazy danych. Dr inż. Paweł Kasprowski Plan wykładu Bazy danych Architektura systemów zarządzania bazami danych Realizacja zapytań algebra relacji Wielodostęp do danych - transakcje Dr inż. Paweł Kasprowski pawel@kasprowski.pl Aplkacja przechowująca

Bardziej szczegółowo

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL, Mój projekt przedstawia bazę danych noclegów składającą się z 10 tabel. W projekcie wykorzystuje program LibreOffice Base do połączenia psql z graficznym interfejsem ( kilka formularzy przedstawiających

Bardziej szczegółowo

Smarty PHP. Leksykon kieszonkowy

Smarty PHP. Leksykon kieszonkowy IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK

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

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Podstawy języka SQL. SQL Structured Query Languagestrukturalny Podstawy języka SQL SQL Structured Query Languagestrukturalny język zapytań DDL Język definicji danych (np. tworzenie tabel) DML Język manipulacji danych (np. tworzenie zapytań) DCL Język kontroli danych

Bardziej szczegółowo

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

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo