PL/SQL Procedural Language SQL
anonymous blocks – bez nazwy
procedures/functions – stored in data dictionary
packages – zgrupowane procedury i funkcje
Data Types
- scalar (binary_integer, integer, string …)
- composite (nested tables, varrays, record …)
r employees%rowtype;
nested tables of numbers:
TYPE – określamy jakiego jest typu
linia 5 – konstruktor – przypisujemy konstruktor do zmiennej (na razie on nie istnieje)
tworzymy go przez extend. W lini 7 tworzenie slotu dla zmiennych.
- reference – procedury mogą odwoływać się do refcursors.
Anonymous blocks:
od DECLARE do BEGIN – deklarujemy zmienne
od BEGIN do EXCEPTION – kod
“:=” (przypisanie wartości)
anchor data type – można przypisać typ danych do zmiennej na podstawie tabeli (linia 6)
Procedures:
tu są nasze procedury
select * from user_source;
select text from user_source where name = ‘nazwa_procedury’;
Zamiast DECLARE (jak w anoymouns blocks) jest AS. Pomiędzy AS a BEGING deklarujemy zmienne.
Wywołanie takiej procedury:
SQL> BEGIN
SQL> give_raises(1.5);
SQL> END;
SQL> /
lub:
exec give_raises(1.5);
CURSOR – to jest SELECT wewnątrz bloku PL/SQL który może zwrócić dużą liczbę rekordów.
Jeżeli SELECT może mieć więcej niż jeden wynik trzeba używać CUROSR’ów.
CURSOR – deklaracja kursora – i następnie SELECT
Cursor zostaje wykonane w kodzie (po BEGIN)
rec – nazwa zmiennej IN in nazwa kursora
count – metoda należąca do nested tables … count równe 1,2,3 …
Te wartości które mamy w tablicy możemy przkazać np do innej procedury.
Cursor teraz zawiera employee_id, hire_data
Aby zrobic updaty na cursorze trzeba go zrobic FOR UPDATE
WHER CURRENT OF EMP_CUR – praca na aktualnych danych w kursorze
LOOPS
EXCEPTION HANDLING
crate or replace procedure add_emp(eid number, last varchar2, first varchar2, email varchar2, hire_date date)
as
hire_date_excepition exception;
email_exception exception;
begin
if hire date > sysdate then
raise hird_date_exception;
end if;
if email is not null and email not like ‘%@%.%’ then
raise email_exception;
end if;
— jakis kod dodajacy pracownika
exception
when hire_date_exception then
dbms_output.put_line(‘wrong date’);
when email_exception then
dbms_output.put_line(‘wrong email format’);
end;
/
exception – tu się zaczyna blok exception
Wywołujemy procedurę:
exec add_emp(500,’Joe’,'Jule’,'joe@serwer.com’,sysdate + 2)
i zwraca błąd, że jest zła data.