1.a Czym jest PL/SQL?

ako że rozkazy języka SQL okazały się niewystarczające do tworzenia efektywnych systemów baz danych, firma Oracle wprowadziła rozszerzenia proceduralne do swojej implementacji języka SQL tworząc język PL/SQL.

PL/SQL to skrót od Procedural Language/Structured Query Language (język proceduralny/strukturalny język zapytań).

PL/SQL wzbogaca SQL o następujące elementy:

  • Możliwość deklaracji i używania zmiennych
  • Instrukcje sterujące kolejnością wykonywania się poleceń (instrukcje decyzyjne, pętle, skoki)
  • Używanie kursorów i definiowanie złożonych struktur danych
  • Realizację operacji wejścia/wyjścia związanych z systemem plików
  • Podprogramy

1.1.a Sekcja deklaracji

Sekcja ta rozpoczyna się słowem kluczowym declare, za którym następuje lista zmiennych i definicji kursorów.

Składnia deklaracji zmiennej jest następująca:

nazwa_zmiennej typ_zmiennej [CONSTANT] [NOT NULL] [:= wartość];

Warto zaznaczyć, że:

  • Identyfikatory nie mogą zaczynać sie od cyfry i być dłuższe niż 30 znaków.
  • Identyfikatory nie mogą brzmieć tak samo jak słowa zarezerwowane (np. DATE, END)
  • Zmienna zadeklarowana, lecz nie zainicjowana posiada wartość NULL. Poniższe trzy deklaracje są równoważne.
ilosc NUMBER(6);
ilosc NUMBER(6) := NULL;
ilosc NUMBER(6) DEFAULT NULL;
  • Zamiast jawnego podawania typu zmiennej można odwołać się do typu zmiennej wcześniej zadeklarowanej lub do typu kolumny bazodanowej poprzez użycie nazwy tej zmiennej (nazwy kolumny) i operatora %TYPE.
imie klienci.imie%TYPE;
  • Przykład nadania wartości zmiennym przez przypisanie:
ilosc NUMBER(2) := 50;
ilosc_2 NUMBER(2) DEFAULT 100;
  • Zmienną można zadeklarować jako stałą, wtedy nie można zmieniać jej wartości w sekcji poleceń wykonywalnych
pi CONSTANT NUMBER(9.7) := 3.1415927;

Typy danych

W języku PL/SQL występują wszystkie typy danych dostępne w języku SQL, a także złożone typy danych bazujące na strukturach zapytań. Niżej znajduje się lista najczęściej wykorzystywanych typów danych:

Typy numeryczne:

NUMBER (P,S) – Typ ten może przechowywać wartości całkowite i rzeczywiste. P (precyzja) oznacza ilość wszystkich cyfr w liczbie, natomiast S (skala) oznacza ilość cyfr po przecinku. P <= 38, -84 <= S <= 127.
BINARY_FLOAT – 32 bitowa liczba zmiennoprzecinkowa
BINARY_DOUBLE – 64 bitowa liczba zmiennoprzecinkowa

Typy znakowe:

CHAR (L) – Przechowuje stałą zadeklarowaną (L) ilość znaków. Jeżeli ilość przypisanych znaków jest mniejsza niż L, wtedy zmienna jest uzupełniana do odpowiedniej długości spacjami. L musi być mniejsze od 256 i domyślnie jest przyjmowane jako 1.
VARCHAR2 (L) – Przechowuje znaki. Zajmuje tylko tyle miejsca, ile znaków zostanie przypisanych do zmiennej. L służy do wyznaczenia maksymalnego, dopuszczalnego rozmiaru łańcucha danych, jaki można przypisać do zmiennej tego typu. L musi być mniejsze od 4000 i nie jest przyjmowane domyślnie (musi zostać wyspecyfikowane).
LONG – Typ bardzo podobny do VARCHAR2, tylko jego maksymalna długość wynosi 2 GB. Służy on do przechowywania bardzo długich tekstów.

Zmienne typu char zajmują zawsze tyle samo miejsca, niezależnie od tego, jakie wartości zostały tym zmiennym przypisane. Zmienne typu varchar2 zajmują miejsca w zależności od wielkości przypisanej wartości.

Pozostałe typy:

RAW (L) – Surowe dane binarne o wielkości podanej w parametrze L. Maksymalna wielkość to 2000 bajtów.
LONG RAW (L) – Surowe dane binarne; poza tym jest to typ identyczny jak LONG.
DATE – Typ ten przechowuje informacje o wieku, roku, miesiącu, dniu, godzinie, minucie i sekundzie. Jest zakodowany na siedmiu bajach, po jednym na każdy komponent. Data musi być z zakresu od 1 stycznia 4712 p.n.e. do 31 grudnia 9999 n.e.
ROWID – Ciąg znaków Base64 reprezentujący unikatowy adres wiersza w tabeli
CLOB – Wielki obiekt znakowy o dłguości do 4GB
BLOB – Wielki obiekt binarny o dłguości do 4GB
BFILE – Wskaźnik do pliku binarnego w systemie operacyjnym
Oracle zaleca stosowanie CLOB i BLOB zamiast bardzo niewygodnych i mało wydajnych odpowiedników typu LONG.

Przykład:

/*Deklaracja      Przypisywana wartość     Przechowywana wartość*/
NUMBER          1234.5678                1234.5678
NUMBER (3)      123                      123
NUMBER (3)      1234                     --Błąd podczas operacji--
NUMBER (7,4)    123.4567                 123.4567
NUMBER (7,4)    123.45678                123.4568
NUMBER (3,-2)   123                      100
NUMBER (3,-1)   123                      120
CHAR (10)       'Ala'                    'Ala       '
VARCHAR2 (10)   'Ala'                    'Ala'
VARCHAR2 (10)   'Ala ma kota'            --Błąd podczas operacji--

Definiowanie własnych podtypów

Użytkownik może zdefiniować w sekcji deklaracyjnej własne podtypy na podstawie istniejących typów skalarnych.

SUBTYPE nowy_typ IS istniejący_typ;

istniejący_typ może zawierać skalę i precyzji dla typów numerycznych oraz długości dla typów znakowych. Podczas deklaracji zmiennych nowego podtypu dane te mogą zostać nadpisane.
Przykład:

DECLARE
SUBTYPE typ_nazwisko IS varchar2(30);
v_nazw1 typ_nazwisko; 			-- zmienna typu varchar2(30)
v_nazw2 typ_nazwisko; 			-- zmienna typu varchar2(30)
v_dl_nazw typ_nazwisko(70); 	              -- zmienna typu varchar2(70)
BEGIN
...
END;

0. O czym jest ta strona?

Strona poświęcona językowi SQL oraz PL/SQL (będącym rozszerzeniem języka SQL o mechanizmy programowania proceduralnego).

Jako że rozkazy języka SQL okazały się niewystarczające do tworzenia efektywnych systemów baz danych, firma Oracle wprowadziła rozszerzenia proceduralne do swojej implementacji języka SQL tworząc język PL/SQL.

PL/SQL to skrót od Procedural Language/Structured Query Language (język proceduralny/strukturalny język zapytań).

PL/SQL wzbogaca SQL o następujące elementy:

  • Możliwość deklaracji i używania zmiennych
  • Instrukcje sterujące kolejnością wykonywania się poleceń (instrukcje decyzyjne, pętle, skoki)
  • Używanie kursorów i definiowanie złożonych struktur danych
  • Realizację operacji wejścia/wyjścia związanych z systemem plików
  • Podprogramy

2. drugi

powinien byc drugi

1. wpis nr 1

powinien byc pierwszy