SQL jako język dostępu do danych

Ogólne zasady używania języka SQL

Jedyną metodą komunikacji z instancją bazy danych Oracle jest korzystanie z języka SQL (Structured Query Language). Składnia tego języka jest zbliżona do naturalnego języka angielskiego. Język SQL jest językiem czwartej generacji, a zatem określamy w nim, co ma zostać wykonane, natomiast nie określamy, w jaki sposób ma to zostać wykonane.

Podczas zapisu poleceń języka SQL obowiązują następujące zasady:

  • Pojedyncze polecenie SQL może być zapisane w kilku liniach. Koniec polecenia SQL zaznacza się średnikiem.
  • Wielkość liter nie ma znaczenia w przypadku zapisu elementów języka (słów kluczowych).
  • Nie wolno dzielić słów pomiędzy linie.
  • Stałe znakowe zamyka się w pojedyncze apostrofy.
  • Komentarze blokowe wprowadza się obejmując tekst znakami /* */.
  • Komentarz „do końca linii” uzyskuje się poprzez wstawienie znaków --.

Grupy poleceń

Na język SQL składają się trzy podstawowe grupy poleceń. Rozróżnienie to jest ważne ze względu na charakterystyczne cechy i ograniczony zakres stosowania poleceń z poszczególnych grup.

1. Polecenia DDL (Data Definition Language)

Polecenia z tej grupy służą do tworzenia, usuwania i modyfikowania obiektów bazodanowych, a także do zarządzania przywilejami. Do grupy tej można zaliczyć między innymi polecenia CREATE, DROP, ALTER, RENAME, GRANT i REVOKE.

2. Polecenia DML (Data Manipulation Language)

Polecenia te służą do operowania na danych znajdujących się w bazie, a więc do odczytywania, wstawiania, usuwania i modyfikacji tych danych. Do poleceń DML należą instrukcje: SELECT, INSERT, DELETE, UPDATE.

3. Polecenia TCL (Transaction Control Language)

Są to polecenia pozwalające zarządzać transakcjami. Do grupy tej należą polecenia: COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION.


Typy danych

Z językiem SQL związane są typy danych, które określają sposób przechowywania informacji w bazie danych Oracle. W bazie danych Oracle mamy do dyspozycji następujące proste typy 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.

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)

Typ podobny do CHAR (L), z tym, że służy do przechowywania ciągów binarnych a nie tekstu.

LONG RAW

Typ podobny do typu LONG, ale służy do przechowywania ciągów binarnych a nie tekstu.

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.

CLOB, BLOB, BFILE

Są to typy danych do przechowywania bardzo dużych obiektów: tekstów, binariów i plików. Maksymalny ich rozmiar wynosi 4GB. Oracle zaleca ich stosowanie zamiast bardzo niewygodnych i mało wydajnych typów 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--