Declare y integer; z varchar2(50); d date; null; Declare x integer:=10; null; x integer; x:=10; dbms_output.put_line('hello world'); for x in 1..10 loop Deklaracja 4 zmiennych. Jednej typu rzeczywistego, jednej typu całkowitego, jednej typu tekstowego i jednej typu date. Dwa sposoby przypisania wartości do zmiennej. Wypisywanie komunikatów na konsolę Różne postacie pętli for (wykonującej się określoną ilość razy). for x in reverse 1..10 loop for x in 20..40 loop st integer:=10; so integer:=20; for x in st..so loop Cheatsheet PL/SQL Andrzej Klusiewicz www.jsystems.pl 1/9
Declare x integer; x:=1; loop exit when x=20; x:=x+1; Declare x integer:=1; while(x<=10) loop x:=x+1; Declare masa number:=90; wzrost number:=1.78; bmi number; bmi:=masa/power(wzrost,2); if bmi<18 then dbms_output.put_line('niedowaga'); elsif bmi<=24.99 then dbms_output.put_line('ok'); else dbms_output.put_line('nadwaga'); end if; Pętla exit when. Taka pętla wykonuje się tak długo, aż nastąpi warunek określony w exit when. Taka pętla wykonuje się tak długo, jak długo prawdziwy jest warunek określny w while. Blok warunkowy z IF; Cheatsheet PL/SQL Andrzej Klusiewicz www.jsystems.pl 2/9
Declare podwyzka number:=300; departament integer:=90; update employees set salary=salary+podwyzka where department_id=departament; commit; Declare srednia number; ilosc_pracownikow integer; select avg(salary), count(*) into srednia, ilosc_pracownikow from employees; pracownik hr.employees%rowtype; pracownik.last_name:='kowalski'; pracownik.first_name:='jan'; dbms_output.put_line(pracownik.last_name ' ' pracownik.first_name); pracownik hr.employees%rowtype; select * into pracownik from hr.employees where employee_id=102; dbms_output.put_line(pracownik.last_name); type raportowy is record( srednia number, liczba_prac integer, maksi number ); raport1 raportowy; select avg(salary), count(*), max(salary) into raport1 from hr.employees; dbms_output.put_line(raport1.srednia); Update tabeli z użyciem dynamicznych wartości. Załadowanie wartości z jednego wiersza do zmiennych. Wykorzystanie zmiennej typu wierszowego. Przypisanie bezpośrednie. Wykorzystanie zmiennej typu wierszowego. Załadowanie danych z bazy. Wykorzystanie własnego typu złożonego z załadowaniem danych z bazy. Cheatsheet PL/SQL Andrzej Klusiewicz www.jsystems.pl 3/9
cursor kursor is select last_name, first_name from hr.employees; for wiersz in kursor loop dbms_output.put_line(wiersz.last_name); create or replace procedure wyswietl_pracownika is nr_pracownika integer:=190; pracownik hr.employees%rowtype; select * into pracownik from hr.employees where employee_id=nr_pracownika; dbms_output.put_line(pracownik.last_name ' ' pracownik.first_name); Użycie kursora do pobrania więcej niż jednego wiersza z bazy Tworzenie procedury składowanej i dwa sposoby jej wywołania wyswietl_pracownika; execute wyswietl_pracownika; show errors; drop procedure wyswietl_pracownika; create or replace procedure wyswietl_pracownika(x integer) is pracownik hr.employees%rowtype; select * into pracownik from hr.employees where employee_id=x; dbms_output.put_line(pracownik.last_name ' ' pracownik.first_name); wyswietl_pracownika(172); Wyświetlanie błędów kompilacji Kasowanie procedury Tworzenie procedury z parametrem i jej wywołanie. Cheatsheet PL/SQL Andrzej Klusiewicz www.jsystems.pl 4/9
dbms_output.put_line(10/0); exception when others then dbms_output.put_line('wystapil blad ' sqlerrm); dbms_output.put_line(10/'lubie pierogi'); dbms_output.put_line(10/0); exception when zero_divide then dbms_output.put_line('wystapil blad ' sqlerrm); when others then null; for x in -10..10 loop dbms_output.put_line(x ' ' 1/x); exception when zero_divide then dbms_output.put_line('przez 0 dzieli tylko Chuck Norris'); create or replace function dawaj10 return number is dbms_output.put_line('cos robię...'); return 10; select dawaj10 from dual; Obsługa wszelakich wyjątków Obsługa różna dla różnych wyjątków Obsługa z użyciem bloków zagnieżdżonych Prosta funkcja Sposoby wywołania funkcji x:=dawaj10; dbms_output.put_line(dawaj10); Cheatsheet PL/SQL Andrzej Klusiewicz www.jsystems.pl 5/9
create or replace function dawajsrednia return number is wynik number; select avg(salary) into wynik from hr.employees; return wynik; Wykorzystanie funkcji select dawajsrednia from dual; select * from hr.employees where salary>dawajsrednia; create or replace function sredniadepartamentu(nr number) return number is wynik number; select avg(salary) into wynik from hr.employees where department_id=nr; return wynik; Funkcja sparametryzowana i sposoby jej wywołania select sredniadepartamentu(90) from dual; Cheatsheet PL/SQL Andrzej Klusiewicz www.jsystems.pl 6/9
CREATE OR REPLACE PACKAGE RAPORTOWANIE IS PROCEDURE RAPORT_PLACOWY; FUNCTION SREDNIA RETURN NUMBER; FUNCTION SREDNIA(NR INTEGER) RETURN NUMBER; create or replace package body raportowanie is PROCEDURE UTAJNIONA IS BEGIN dbms_output.put_line('najlepsze kasztany!'); Nagłówek pakietu Body pakietu PROCEDURE RAPORT_PLACOWY IS BEGIN utajniona; DBMS_OUTPUT.PUT_LINE('WYKONUJE RAPORT...'); FUNCTION SREDNIA RETURN NUMBER IS BEGIN RETURN 6000; FUNCTION SREDNIA(NR INTEGER) RETURN NUMBER IS BEGIN RETURN 4543*NR/10; create or replace trigger wyzw1 after update on hr.employees dbms_output.put_line('ktos zmienil liste pracownikow!'); Wyzwalacz uruchamiający się w związku ze zdarzeniem update Cheatsheet PL/SQL Andrzej Klusiewicz www.jsystems.pl 7/9
create or replace trigger wyzw1 after update or insert or delete on hr.employees dbms_output.put_line('ktos zmienil liste pracownikow!'); Wyzwalacz uruchamiający się w związku ze zdarzeniami update, insert i delete create or replace trigger wyzw1 after update or insert or delete on hr.employees dbms_output.put_line('cos sie stalo...'); if updating then dbms_output.put_line('to byl update'); end if; create or replace trigger podwyzkowicz after update on hr.employees for each row if :new.salary>:old.salary then dbms_output.put_line('to byla podwyzka dla Pana/Pani ' :new.last_name); else dbms_output.put_line('to byla obnizka lub brak zmian dla Pana/Pani ' :new.last_name); end if; create or replace trigger dobryszef before update on hr.employees for each row when(new.salary>old.salary) :new.last_name:=:new.last_name ' to sierściuch '; create or replace trigger dobryszef before update on hr.employees for each row when(new.salary>old.salary) Wykorzystanie zmiennych w wyzwalaczach i predykatów takich jak :updating, inserting, deleting Wyzwalacz wierszowy, uruchamiający się dla każdego wiersza osobno Zmiana danych w locie przy użyciu wyzwalacza Warunek na poziomie uruchomienia Cheatsheet PL/SQL Andrzej Klusiewicz www.jsystems.pl 8/9
:new.last_name:=:new.last_name ' to sierściuch '; Cheatsheet PL/SQL Andrzej Klusiewicz www.jsystems.pl 9/9