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