dbs_PLSQL.pdf
(
195 KB
)
Pobierz
Jêzyk PL/SQL
Język PL/SQL
1.
Charakterystyka języka PL/SQL
rozszerzenie SQL o elementy języka proceduralnego
2.
Zastosowanie
•
SQL, aplikacje baz danych np. Oracle Froms, Oracle Reports
Struktura programu w jêzyku PL/SQL
declare
/* początek głównego bloku */
/* deklaracje kursorów, zmiennych */
/* wyjątków, w ramach głównego bloku*/
begin
declare
/* początek podbloku */
/* deklaracje kursorów*/
* zmienych, wyjątków, w ramach podbloku */
imię
char
(10);
pensja
number
(7);
.....
begin
/* instrukcje */
select
imię, nazwisko, placa_pod
into
...
from
pracownicy;
.....
exception
/* obsługa wyjątków */
when
NO_DATA_FOUND
then
;
.....
end
; /* koniec podbloku */
exception
when
NO_DATA_FOUND
then
...
/* procedury obsługi wyjątków */
end
;
/*koniec głównego bloku */
Zmienne i sta³e
Zmienne
Błąd! Nie zdefiniowano zakładki.
•
proste - wartości typu prostego (np. numeryczne, znakowe)
•
złożone - wartości są typu złożonego (zmienne te są nazywane
rekordami
)
1
•
Język PL/SQL
Deklarowanie zmiennych
declare
nazwa_zmiennej typ(długość);
declare
licznik
number
(4); /* zmienna numeryczna o długości 4 cyfr */
znak
char
(1); /* zmienna znakowa o długości 1 znaku */
flaga
boolean
; /* zmienna boolowska */
Tak zadeklarowanym zmiennym można następnie przypisać określoną wartość
używając operatora podstawienia
:=
, np.
licznik :=10, znak :='A'
.
Deklarowanie stałych
declare
nazwa_zmiennej
constant
typ(długość);
declare
liczba_iteracji
constant number
(3) :
=
100;
Typ zmiennej lub stałej można również zadeklarować używając
pseudo-
atrybutu
%TYPE
Błąd! Nie zdefiniowano zakładki.
, określającego typ podanego
przed nim atrybutu relacji. Przykładowo:
osoba pracownicy.nazwisko
%TYPE
;
deklaruje zmienną
osoba
o typie zgodnym z typem atrybutu
nazwisko
relacji
pracownicy
.
Typ rekordowy
Zmienną typu rekord możemy zadeklarować na dwa sposoby:
•
przy użyciu pseudo-atrybutu
%ROWTYPE
Błąd! Nie zdefiniowano zakładki.
,
•
przy użyciu złożonego typu danych
RECORD
.
Sposób pierwszy umożliwia deklarowanie zmiennych typu rekord, których
struktura jest zgodna ze strukturą krotki relacji lub krotki wyznaczonej przez
tzw. kursor. Przykładowo:
pracownik_rekord
pracownicy%
ROWTYPE
;
deklaruje zmienną
pracownik_rekord
o strukturze zgodnej ze strukturą relacji
pracownicy
; oznacza to, że
każde pole zmiennej odpowiada określonemu
atrybutowi relacji. Programista może się odwołać do dowolnego pola tak
zadeklarowanej zmiennej. Przykładowo:
2
Język PL/SQL
pracownik_rekord.nazwisko
oznacza odwołanie do pola
nazwisko
zmiennej
pracownik_rekord.
Sposób drugi umożliwia deklarowanie zmiennych typu rekord o dowolnej
strukturze.
declare
type
pracownik_rekord1
is record
(imię
char
(10),
nazwisko pracownicy.nazwisko%
TYPE
,
zespoly zespoly.nazwa%
TYPE
,
pensja
number
(6, 2)
not null
:= 900);
deklaruje typ
pracownik_rekord1
składający się z czterech pól, których typy
zostały jawnie określone w deklaracji. Pola mogą być opcjonalne lub
obowiązkowe. Pola obowiązkowe deklarujemy za pomocą ograniczenia
integralnościowego
not null
i obowiązkowo nadajemy im wartości. W
deklaracji typu, pola opcjonalne mogą być również inicjowane wartościami.
Przykładowo:
prac_zesp20
pracownik_rekord1;
deklaruje zmienną typu
pracownik_rekord1
.
Typ tablicowy
W celu wykorzystania zmiennej omawianego typu należy najpierw
zadeklarować odpowiedni typ tablicowy, a następnie – samą zmienną. Typ
tablicowy deklarujemy w bloku deklaracji podprogramu, w następujący sposób:
declare
type
nazwa_typu
is
table
of
typ_kolumny [not null]
index
by
binary_integer
;
typ_kolumny
oznacza jeden z predefiniowanych typów prostych, m. in.
char
,
varchar2
,
number
,
date
lub typ rekordowy
declare
type
Tab_Liczbowa
is
table
of
number
3
Język PL/SQL
index
by
binary_integer
;
-- zmienna typu tablicowego
tablica_liczbowa Tab_Liczbowa;
n
binary_integer
:= 0;
wartość
number
(2);
Do kolejnych komórek tak zadeklarowanej zmiennej odwołujemy się za pomocą
wyrażenia o następującej składni:
nazwa_zmiennej (numer_komórki);
W poniższym przykładzie, najpierw nadajemy wartość komórce o indeksie 0,
następnie wykorzystujemy pętlę do zainicjowania wartościami numerycznymi
pięciu kolejnych komórek (począwszy od komórki o indeksie 1), na końcu
odczytujemy wartość komórki o indeksie 5.
tablica_liczbowa(0) := 10;
for
n in 1..5
loop
tablica_liczbowa(n):=n;
end
loop
;
wartość := tablica_liczbowa(5);
Kursory
Każde zapytanie
SQL
umieszczone w programie
PL/SQL
jest wykonywane w
tzw.
obszarze
roboczym
Błąd! Nie zdefiniowano zakładki.
.
PL/SQL
wykorzystuje ten obszar do przechowywania danych otrzymanych w wyniku
zapytania oraz do przechowywania dodatkowych informacji dotyczących stanu
wykonywanego zapytania, tzw.
atrybutów
.
Kursor
(ang. cursor) jest
konstruktorem
PL/SQL
umożliwiającym:
•
nadanie nazwy temu obszarowi,
•
dostęp do niego,
•
pobranie z niego danych,
kontrolę procesu przetwarzania danych.
Wyróżniamy dwa rodzaje kursorów:
•
jawne
Błąd! Nie zdefiniowano zakładki.
(ang. explicit) - stosowane w
zapytaniach wyznaczających wiele krotek i w tzw.
pętlach z kursorem
(ang. Cursor For Loop),
4
•
Język PL/SQL
•
niejawne
Błąd! Nie zdefiniowano zakładki.
(ang. implicit) - stosowane w
pozostałych poleceniach
SQL
(tj.,
insert
,
update
,
delete
) i poleceniu
select
wyznaczającym jedną krotkę.
Kursory jawne
Przed użyciem kursora jawnego należy go najpierw zadeklarować poleceniem
declare
Błąd! Nie zdefiniowano zakładki.
o następującym formacie:
declare
cursor
osoba_kursor
is
/* deklaracja kursora */
select
imię,nazwisko
from
pracownicy, zespoly
where
pracownicy.id_zesp=zespoly.id_zesp
and
zespoly.nazwa='BAZY DANYCH';
Otwarcie kursora:
open
osoba_kursor;
Pobranie krotki wyznaczonej przez kursor
fetch
...
into
Błąd! Nie zdefiniowano zakładki.
Przykład
:
declare
cursor
Błąd! Nie zdefiniowano zakładki. pracownik_kursor
is
select
nazwisko, placa_pod, id_zesp
from
pracownicy;
osoba_nazwisko pracownicy.nazwisko
%TYPE
Błąd! Nie
zdefiniowano zakładki.;
osoba_płaca pracownicy.placa_pod
%TYPE
;
osoba_id_zesp pracownicy.id_zesp
%TYPE
;
pracownik_dane pracownik_kursor
%ROWTYPE
Błąd! Nie
zdefiniowano zakładki.;
fetch
pracownik_kursor
into
osoba_nazwisko, osoba_płaca, osoba_id_zesp;
fetch
pracownik_kursor
into
pracownik_dane;
Polecenie
fetch
pobiera pojedynczą krotkę. W celu pobrania większej liczby
krotek jest konieczne wielokrotne użycie polecenia
fetch
(np. w pętli).
Zamknięcie kursora:
close
osoba_kursor;
5
Plik z chomika:
say_yes
Inne pliki z tego folderu:
Dokumentacja MySQL 5 eng.pdf
(17092 KB)
Fundamentals.of.Relational.Database.pdf
(19769 KB)
Professional Ado Net 2.0 (Programming With Sql Server 2005, Oracle And Mysql) -.pdf
(10867 KB)
Projektowanie baz danych w Access.pdf
(1133 KB)
SQL.A.BEGINNER.pdf
(3890 KB)
Inne foldery tego chomika:
Dokumenty
Galeria
Prywatne
Tapety
Zgłoś jeśli
naruszono regulamin