BAZY DANYCH II WYKŁAD 2 Plan wykładu Bloki Struktura bloku
Transkrypt
BAZY DANYCH II WYKŁAD 2 Plan wykładu Bloki Struktura bloku
2010-10-21 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 W programach pisanych w PL/SQL podstawową jednostką jest blok, Program składa się przynajmniej z jednego bloku, Bloki mogą być zagnieżdżone, Bloki mogą być wykonywane tylko raz, bez zapisywania, Bloki mogą być też zapisywane w bazie w celu ich późniejszego wykorzystania, Bloki obsługują wszystkie instrukcje DML, a także DDL (za pomocą specjalnego pakietu). Struktura bloku DECLARE (opcjonalne) deklaracje zmiennych, kursory, wyjątki BEGIN (wymagany) wyrażenia SQL i PL/SQL EXCEPTION (opcjonalny) obsługa wyjątków END; (wymagany) 1 2010-10-21 Minimalna struktura bloku Sekcja deklaracji BEGIN NULL; END; BEGIN END; Każdy blok musi zawierać przynajmniej jedno wykonywalne polecenie, inaczej zostanie wygenerowany błąd. Sekcja wykonawcza Jest niezbędna, Rozpoczyna się od słowa kluczowego BEGIN, Musi posiadać co najmniej jedną instrukcję, Może zawierać dowolną liczbę bloków PL/SQL, Może zawierać polecenia SQL aby pobierać dane z bazy lub/i PL/SQL aby przetwarzać je w bloku, Jest to sekcja opcjonalna, Umieszczamy w niej zmienne i ich typy, stałe, kursory, wyjątki definiowane przez użytkownika, wszystko to do czego odwołujemy się w kolejnej sekcji bloku, Oprócz deklaracji zmiennych można dokonać w tym miejscu także ich inicjalizacji. DECLARE v_zmienna TIMESTAMP; Sekcja wyjątków Opcjonalna, Jest zagnieżdżona w sekcji wykonywalnej, Rozpoczyna się od słowa kluczowego EXCEPTION, Pozwala na przechwytywanie błędów i nienormalnych zachowań wygenerowanych w sekcji wykonawczej, Błędy przechwytywane są za pomocą funkcji dostępnych pakietach lub instrukcji dyrektyw. 2 2010-10-21 Podstawowe typy bloków Bloki anonimowe Bloki anonimowe, Bloki nazwane: procedury, funkcje. Przykład Nie posiadają nazwy i nie są przechowywane w bazie danych, Można w nich wywoływać inne programy, ale ich nigdzie nie można wywołać, Są kompilowane za każdym razem gdy program jest uruchamiany, Ich struktura jest taka jak na poprzednim slajdzie. Tworzenie i uruchamianie włącza wyjście serwera SET SERVEROUTPUT ON DECLARE v_imie VARCHAR2(20); pobiera imię pracownika nr 200 do zmiennej v_imie BEGIN SELECT first_name INTO v_imie FROM employees WHERE employee_id=200; DBMS_OUTPUT.PUT_LINE(v_imie); END; procedura z wbudowanego pakietu Oracle Okno główne programu Oracle Express Edition – SQL Command 3 2010-10-21 Tworzenie i uruchamianie Tworzenie i uruchamianie Okno główne programu SQL*Plus Okno główne programu Oracle SQL Developer – Run Script Zasady języka Identyfikatory Znaki specjalne Słowa zarezerwowane Ograniczniki Literały Komentarze Identyfikatory Służą do nazywania zmiennych, kursorów, funkcji, procedur, etc., Zasady tworzenia: <30 znaków Rozpoczynają się literą Mogą zawierać znaki $,#,_ i cyfry (oprócz pierwszej pozycji), Nie mogą zawierać znaków przestankowych, odstępów i myślników, Nie mogą zawierać słów zarezerwowanych, Wyjątek to identyfikatory w cudzysłowach, gdzie można stosować prawie wszystko. 4 2010-10-21 Znaki i słowa zarezerwowane Są to identyfikatory interpretowane jako polecenia które mają inny specjalny cel, Jeśli użyjemy je w aplikacji jako np. nazwę zmiennej to wystąpią błędy, Mogą zmieniać się biorąc pod uwagę wersje, Najlepszą praktyką jest przyjmowanie specjalnej konwencji nazw, tzn. Zmienna – v_nazwa Stała – c_nazwa Kursor – cur_nazwa Itd. Literały Wartości nie reprezentowane przez identyfikator, Znaki i łańcuchy znaków zapisujemy w pojedynczych apostrofach, DBMS_OUTPUT.PUT_LINE(’Równanie Laplace’a’) – błąd, DBMS_OUTPUT.PUT_LINE(’Równanie Laplace’’a’) – stosujemy dwa apostrofy, nie cudzysłów, DBMS_OUTPUT.PUT_LINE(q’!Równanie Laplace’a!’) DBMS_OUTPUT.PUT_LINE(q’[Równanie Laplace’a ]’) - od wersji 10g DBMS_OUTPUT.PUT_LINE(q’<Równanie Laplace’a>’) Ograniczniki +,-,*,/ - operatory matematyczne, >,<,<>,=,!= - operatory relacji, --, /*, */ - komentarze, <<, >> - etykiety, % - atrybuty (TYPE, etc.), ’ – ogranicznik łańcuchów znaków, ” – ogranicznik identyfikatorów, := - przypisanie, inicjalizacja zamiennej, || - łączenie łańcuchów znaków, Literały Wartości logiczne w PL/SQL to TRUE, FALSE i NULL, Związane z datą i czasem: np. ’2004-06-05’, etc. 5 2010-10-21 Deklaracja i używanie zmiennych Deklaracja i używanie zmiennych DECLARE identyfikator [CONSTANT] typ_danych [NOT NULL] [:= | DEFAULT wartość]; zmienna musi być zainicjalizowana DECLARE v_data_urodzenia DATE; v_numer_pozycji NUMBER(2) NOT NULL :=10; v_nazwa VARCHAR2(10) DEFAULT ’kot’; c_numer CONSTANT NUMBER(3) :=100; v_nazwa NUMBER(2); BEGIN v_nazwa:=120; DBMS_OUTPUT.PUT_LINE(’Ta liczba to’ || v_nazwa); END; stała musi być zainicjalizowana Dobre nawyki i zasady - zmienne Nazwy identyfikatorów powinny być samoopisowe, Używaj konwencji v_ do zmiennej, c_ do stałej, etc., Inicjuj wartość, gdy deklarujesz zmienną NOT NULL lub stałą, Nie używaj nazw kolumn do nazywania zmiennych, Typy danych języka PL/SQL Typy Typy Typy Typy skalarne, referencyjne, złożone, LOB. 6 2010-10-21 Typy skalarne Znaki i łańcuchy znaków Znaki i łańcuchy znaków, Liczby, Typy logiczne, Data i czas. Typy liczbowe NUMBER [(precyzja, skala)] – precyzja wartości od 1 do 38, skala -84 do 127, identyczny z typem NUMBER bazy danych, BINARY_INTEGER – wartości z przedziału od -2147483647 do + 2147483647, przechowywane w postaci binarnej, PLS_INTEGER – zalecany przez Oracle typ, stosowany w obrębie bloku, bez zapisu do bazy, CHAR [(max długość)] - typ danych o stałej liczbie znaków, pojemność określamy w bajtach, maksymalnie 32,767 bajtów VARCHAR2 (max długość) – typ danych w Oracle 10g, i inne nie stosowane lub nie zalecane, np. LONG, LONG ROW, Typy liczbowe oraz logiczne BINARY_DOUBLE, BINARY_FLOAT – nowość od wersji Oracle 10g, typ zmiennoprzecinkowy o podwójnej (pojedynczej) precyzji zgodny z IEEE-754, BOOLEAN – przyjmuje wartości TRUE, FALSE, NULL. 7 2010-10-21 Data i czas DATE – podstawowy typ dotyczący daty i czasu, możne przechowywać rok, miesiąc, dzień, godzinę, minutę, sekundę, TIMESTAMP: Data i czas INTERVAL: INTERVAL YEAR TO MONTH – zwraca różnicę pomiędzy datami, uwzględnia wartości od lat do miesięcy, INTERVAL DAY TO SECOND - zwraca różnicę pomiędzy datami, uwzględnia wartości od dni do sekund, TIMESTAMP [(precyzja)] – rozszerzenie typu DATE o ułamki sekund, w tym celu określa się precyzję 0-9, domyślnie 6, TIMESTAMP WITH TIME ZONE – jak wyżej, tylko uwzględnia czas lokalny względem strefy UTC, TIMESTAMP WITH LOCAL ZONE – jak wyżej, tylko odpowiada lokalizacji klienta korzystającego z sewera bazodanowego. Typy danych - przykłady Typy złożone v_time DATE :=SYSDATE+5; v_znak VARCHAR2(5) NOT NULL :=’znak’; v_liczba PLS_INTEGER; v_logika BOOLEAN :=TRUE; c_stala CONSTANT NUMBER(5,2) :=0; Rekordy, Kolekcje: tabele zagnieżdżone, indeksowane, tablice VARRAY. 8 2010-10-21 Typ zakotwiczony %TYPE – jeśli deklarowana zmienna jest bezpośrednim odwzorowaniem kolumny z bazy danych można zakotwiczyć typ zmiennej do typu bazy danych kolumny, identyfikator tabela.kolumna%TYPE; v_nazwisko employees.last_name%TYPE; v_id employees.employee_id%TYPE :=0; Typ zakotwiczony %ROWTYPE – zakotwicza zmienną do wszystkich kolumn tabeli, identyfikator tabela%ROWTYPE; employees_record employees%ROWTYPE; jobs_record jobs%ROWTYPE; Typ zakotwiczony Zalety: Przydatne przy zmienianiu typu danych w tabeli, Przydatne przy zmianie precyzji, Przy tworzeniu dużych bloków daje oszczędność czasu i odporność na błędy, Typ zakotwiczony Zalety: Nie musi być znana liczba i typy kolumn przy deklaracji zmiennej rekordowej, Szczególnie przydatne przy pobieraniu wiersza za pomocą klauzuli SELECT oraz INSERT i UPDATE. 9 2010-10-21 Wykorzystana literatura J. Price, Oracle Database 11g i SQL. Programowanie. Helion, 2009. S. Urman, R. Hardman, M. McLaughlin, Oracle Database 10g. Programowanie w języku PL/SQL. Helion, 2008. www.oracle.com 10