PL/SQL. Ćwicznia 2. Ćwiczenia 3

Wielkość: px
Rozpocząć pokaz od strony:

Download "PL/SQL. Ćwicznia 2. Ćwiczenia 3"

Transkrypt

1 PL/SQL Ćwicznia 2 4. Napisać kod bloku animowanego w PL/SQL, za pomocą którego z tabeli osoby będzie można wybrać osobę o określonym nazwisku i imieniu, przy czym nazwisko i imię tej osoby jest podane poprzez zainicjowanie dwóch odpowiednich zmiennych PL/SQL. Należy wyświetlić pozostałe dane tej osoby. Poszukujemy nazwisko i imię Lis Jan. o_imie1 VARCHAR(20):='Jan'; o_nazwisko VARCHAR(20):='Lis'; SELECT imie1,nazwisko INTO o_imie1, o_nazwisko FROM osoby WHERE imie1=o_imie1, INITCAP(nazwisko)=o_Nazwisko; DBMS_OUTPUT.PUT_LINE(o_Imie ' ' o_nazwisko); 4a) Napisać kod bloku animowanego w PL/SQL, za pomocą którego z tabeli osoby będzie można wybrać osobę o określonym nazwisku i imieniu, przy czym nazwisko i imię tej osoby jest podane poprzez zainicjowanie jednej zmiennej PL/SQL wartością Lis Jan. Należy wyświetlić pozostałe dane tej osoby. o_dane VARCHAR(20):='Jan Lis'; SELECT imie1 ' ' nazwisko dane INTO o_dane FROM osoby WHERE imie1 ' ' INITCAP(nazwisko)=o_dane; DBMS_OUTPUT.PUT_LINE(o_dane); Ćwiczenia 3 1'. Napisać kod bloku animowanego języka PL/SQL za pomocą którego będzie można wyświetlić tę osobę( nazwisko, imię, pensja) które jest aktualnie zatrudniona i aktualnie pobiera maksymalną pensje, przy czym płeć tej osoby jest zainicjowana przez odpowiednią zmienną. o_plec CHAR(1):='K'; o_nazwisko VARCHAR(20); o_imie1 VARCHAR(20); p_pensja NUMBER(2); SELECT o.nazwisko, o.imie1, p.pensja INTO o_nazwisko, o_imie1, p_pensja FROM osoby o, pensje p,zatrudnienia z 1

2 WHERE o.plec=o_plec and o.id=z.id_os and o.id=p.id_os and z.do is null and p.do is null and p.pensja=(select MAX(p.pensja) FROM osoby o,zatrudnienia z, pensje p WHERE o.plec=o_plec and o.id=z.id_os and o.id=p.id_os and z.do is null and p.do is null); DBMS_OUTPUT.PUT_LINE(o_Nazwisko ' ' o_imie1 ' ' p_pensja); 2`. Napisać kod bloku animowanego w PL/SQL za pomocą którego zostanie wyświetlony komunikat: osoba wybrana, która jest imie i nazwisko ma inicjały Przy czym należy wykorzystać 2 zmienne PL/SQL do podstawienia inicjałów, których typ jest zainicjowany jako podtyp typu tekstowego o stałej długości 1. Osoba jest dana poprzez indetyfikator (id) zainicjowanie zmiennej PL/SQL. o_id NUMBER:=1; SUBTYPE inicjal IS CHAR(1); o_inic1 inicjal; o_inic2 inicjal; o_nazwisko VARCHAR(20); o_imie1 VARCHAR(20); SELECT INITCAP(nazwisko), imie1,initcap(substr(nazwisko,1,1)), SUBSTR(imie1,1,1) INTO o_nazwisko, o_imie1,o_inic1,o_inic2 FROM osoby WHERE id=o_id; DBMS_OUTPUT.PUT_LINE('Osoba wybrana,ktora jest ' o_nazwisko ' ' o_imie1 ' ma inicjaly ' o_inic1 ' ' o_inic2); 1. Napisać kod bloku animowanego w PL/SQL za pomocą którego zostaną wyświetlone dane tej osoby, która kiedykolwiek była zatrudniona przez najdłuższy okres czasu na wydziale, którego nazwa jest podana poprzez zainicjowanie odpowiedniej zmiennej. o_nazwisko VARCHAR(20); o_imie VARCHAR(20); w_nazwa VARCHAR(10):='prawo'; SELECT o.nazwisko, o.imie INTO o_nazwisko, o_imie1 From osoby o,zatrudnienia z,wydzialy w WHERE o.id=z.id_os and w.nazwa=w_nazwa and z.id_wydz=w.id and (sysdate-z.od)= (Select MAX(sysdate-z1.od) from osoby o1,zatrudnienia z1, wydzialy w1 where o1.id=z1.id_os and w1.nazwa=w_nazwa and z1.id_wydz=w1.id); DBMS_OUTPUT.PUT_LINE(o_Nazwisko ' ' o_imie1); 2. Napisać kod bloku animowanego w PL/SQL za pomocą którego będzie można wyświetlić nazwę tego wydziału, na którym liczba wszystkich kiedykolwiek 2

3 zatrudnionych osób była największa, przy czym płeć tych osób jest podana poprzez zainicjowanie odpowiedniej zmiennej. PL CHAR(1):='M'; WYNIK VARCHAR(30); SELECT NAZWA INTO WYNIK FROM WYDZIALY WHERE ID = (SELECT ID FROM (SELECT COUNT (Z.ID_WYDZ) ILE,Z.ID_WYDZ ID FROM ZATRUDNIENIA Z, OSOBY O WHERE O.ID=Z.ID_OS AND O.PLEC=PL GROUP BY Z.ID_WYDZ) WHERE ILE =( SELECT MAX(ILE) FROM( SELECT COUNT (Z.ID_WYDZ) ILE,Z.ID_WYDZ FROM ZATRUDNIENIA Z, OSOBY O WHERE O.ID=Z.ID_OS AND O.PLEC=PL GROUP BY Z.ID_WYDZ))); DBMS_OUTPUT.PUT_LINE( '' WYNIK ''); Ćwiczenia 4 (Typy rekordowe) 1a) Zdefiniować typ rekordowy t_rekordosoba i przy jego wykorzystaniu wyświetlić dane osoby o id poprzez zdefiniowanie odpowiedniej zmiennej PL/SQL. TYPE t_recordosoba IS RECORD ( o_id osoby.id%type, o_nazwisko osoby.nazwisko%type, o_imie1 osoby.imie1%type, o_imie2 osoby.imie2%type, o_plec osoby.plec%type, o_d osoby.d_ur%type ); osoba t_recordosoba; o_id1 NUMBER:=1; SELECT o.id, o.nazwisko,o.imie1,o.imie2, o.plec,o.d_ur INTO osoba FROM osoby o 3

4 WHERE o.id=o_id1; DBMS_OUTPUT.PUT_LINE('Osoba o id=' osoba.o_id 'to' osoba.o_imie1 ' ' osoba.o_nazwisko ' dacie urodzenia ' osoba.o_d); b) wykorzystanie rekordu niejawnego osoba osoby%rowtype; o_id1 NUMBER:=1; SELECT o.id, o.nazwisko,o.imie1,o.imie2, o.d_ur,o.plec INTO osoba FROM osoby o WHERE o.id=o_id1; DBMS_OUTPUT.PUT_LINE('Osoba o id=' osoba.id 'to' osoba.imie1 ' ' osoba.nazwisko ' dacie urodzenia ' osoba.d_ur); 2. Zdefiniować 2 type rekordowe użytkownika t_rekordosoba1 I t_recordosoba2 zawierające następujące pola: z_id, z_nazwisko, z_imie, z_data_ur. Następnie zadeklarować po 2 zmienne dla każdego z tych typów recordowych. Niech pola jednej z tych zmiennych z_id=20, z_nazwisko=kowalska, z_imie=maria, z_data_ur=23/05/1981. Dokonać próby przypisania tych wartości pozostałym zadeklarowanych zmiennych rekordowych. TYPE t_recordosoba1 IS RECORD ( z_id osoby.id%type, z_nazwisko osoby.nazwisko%type, z_imie osoby.imie1%type, z_data_ur osoby.d_ur%type ); TYPE t_recordosoba2 IS RECORD ( z_id osoby.id%type, z_nazwisko osoby.nazwisko%type, z_imie osoby.imie1%type, z_data_ur osoby.d_ur%type ); os1 t_recordosoba1; os2 t_recordosoba2; 4

5 os1.z_id:=20; os1.z_nazwisko:='kowalska'; os1.z_imie:='maria'; os1.z_data_ur:=to_date('23/05/1981','dd/mm/yyyy'); os2.z_id:=os1.z_id; os2.z_nazwisko:=os1.z_nazwisko; os2.z_imie:=os1.z_imie; os2.z_data_ur:=os1.z_data_ur; 3.a) Wstawić do tabeli wiersz danych id=15, nazwisko=pawlowska,imie1=marta, data_ur=06/07/1982, plec=k. Wstawienie wiersza danych do tabeli bazodanowej przeprowadzić z wykorzystaniem zmiennej rekordowej. osoba osoby%rowtype; osoba.id:=15; osoba.nazwisko:='pawlowska'; osoba.imie1:='marta'; osoba.data_ur:=to_date('06/07/1982', 'DD/MM/YYYY'); osoba.plec:='k'; INSERT INTO osoby VALUES osoba; COMMIT; b) W punkcie a) zostały podane błędne dane ustawionego rekordu. Poprawne dane są następujące id=15, nazwisko=pawłowki imie=marek data_ur=05/05/1980, plec=m. Dokonaj korekty błędu ustawionego wiersza danych z wykorzystaniem zmiennej rekordowej. osoba osoby%rowtype; osoba.id:=15; osoba.nazwisko:='pawlowski'; osoba.imie1:='marek'; osoba.data_ur:=to_date('05/05/1980', 'DD/MM/YYYY'); osoba.plec:='m'; UPDATE osoby SET ROW=osoba WHERE id=15; COMMIT; c) Niektóre z poprawionych danych w punkcie b) nadal są błędne osoba o id=15 ma nazwisko Pawelski I data_ur=20/07/1982 pozostałe dane są poprawne. Dokonaj korekty błędnych danych wykorzystując w tym celu zmienną rekordową. 5

6 OS OSOBY%ROWTYPE; select id, imie1,imie2,d_ur,plec into os.id,os.imie1,os.imie2,os.d_ur,os.plec from osoby where id=15; os.nazwisko:='pawelski'; update OSOBY set row=os where id=15; Ćwiczenia 5 (if, for, while, loop) 1. Napisać kod bloku anonimowego PL/SQL, za pomocą którego dla dowolnej osoby danej za pomocą id podanego w odpowiedniej zmiennej PL/SQL -owej zostanie wyświetlony komunikat dotyczącej sumy jej nazwiska i mienia. I tak gdy długość jest mniejsza od 9 "osoba o krótkiej długości imienia i nazwiska", gdy od 10 do 20 " osoba o długiej nazwiska i imienia", zaś ponad 20 - "osoba o bardzo długiej długości imienia i nazwiska" o_id osoby.id%type:=1; opis VARCHAR2(60); o_dl NUMBER(2); SELECT length(o.nazwisko)+length(o.imie1) INTO o_dl FROM osoby o WHERE o.id=o_id; IF o_dl < 9 THEN opis:='osoba o krotkiej dlugosci imienia i nazwiska'; ELSIF o_dl > 10 AND o_dl < 20 THEN opis:='osoba o dlugiej dlugosci imienia i nazwiska'; ELSE opis:='osoba o bardzo dlugiej dlugosci imienia i nazwiska'; END IF; DBMS_OUTPUT.PUT_LINE(opis); 2. Napisać kod bloku anonimowego PL/SQL, za pomocą którego dla dowolnej osoby za pomocą id podanego w odpowiednio w odpowiednio zainicjowanej zmiennej PL/SQL - owej zostanie wyświetlony komunikat dotyczący daty jej urodzin. Osoba o id = 1. Tj. Lis Jan urodził się w 4 kwartale. Nie wolno stosować interwału czasowego określającego kwartał. o_id osoby.id%type:=1; opis VARChAR2(60); o_miesiac NUMBER; SELECT TO_NUMBER(TO_CHAR(d_ur,'MM')) INTO o_miesiac 6

7 FROM osoby WHERE id=o_id; IF o_miesiac < 4 THEN opis:='osoba o id= ' o_id ' urodzila sie w 1 kwartale'; ELSIF o_miesiac <7 THEN opis:='osoba o id= ' o_id ' urodzila sie w 2 kwartale'; ELSIF o_miesiac < 10 THEN opis:='osoba o id= ' o_id ' urodzila sie w 3 kwartale'; ELSE opis:='osoba o id= ' o_id ' urodzila sie w 4 kwartale'; END IF; DBMS_OUTPUT.PUT_LINE(opis); 3. Napisać kod blok anonimowego PL/SQL, za pomocą którego dla aktualnej osoby podaje za pomocą id podanego w odpowiednio zainicjowanej zmiennej PL/SQL - owej zostanie wyświetlony komunikat dotyczący aktualnie pobranej pensji - do której grupy wynagrodzeń należy pensja. Poniżej 800zl - grupa I, od 801 do grupa II, od 1101 do 1400zl - grupa III itd. co 300 zł. Zaś po 2000zl co 500zl nowa grupa, zaś po 6000 zł - grupa XIII. Osoba o id = 3 tj. Norek Tadeusz pobiera aktualnie pensje w wysokości 1800zl - V grupa wynagrodzeń. Zastosować instrukcje CASE wyszukująca. o_id osoby.id%type:=3; p_pensja pensje.pensja%type; opis VARCHAR2(60); SELECT p.pensja INTO p_pensja FROM osoby o, pensje p WHERE o.id=o_id AND p.id_os=o_id AND p.do IS NULL; CASE WHEN p_pensja < 800 THEN opis:='osoba o id=' o_id 'pobiera pensje ' p_pensja ' - grupa I'; WHEN p_pensja > 801 AND p_pensja < 1100 THEN opis:='osoba o id=' o_id 'pobiera pensje ' p_pensja ' - grupa II'; WHEN p_pensja > 1100 and p_pensja < 1400 THEN opis:='osoba o id=' o_id 'pobiera pensje ' p_pensja ' - grupa III'; WHEN p_pensja > 1401 and p_pensja < 1700 THEN opis:='osoba o id=' o_id 'pobiera pensje ' p_pensja ' - grupa IV'; WHEN p_pensja >1701 and p_pensja < 2000 THEN opis:='osoba o id=' o_id 'pobiera pensje ' p_pensja ' - grupa V'; WHEN p_pensja > 2001 and p_pensja < 3000 THEN opis:='osoba o id=' o_id 'pobiera pensje ' p_pensja ' - grupa VI'; WHEN p_pensja > 3001 and p_pensja < 4000 THEN opis:='osoba o id=' o_id 'pobiera pensje ' p_pensja ' - grupa VII'; WHEN p_pensja > 4001 and p_pensja < 5000 THEN opis:='osoba o id=' o_id 'pobiera pensje ' p_pensja ' - grupa VIII'; WHEN p_pensja > 5001 and p_pensja < 6000 THEN opis:='osoba o id=' o_id 'pobiera pensje ' p_pensja ' - grupa IX'; 7

8 ELSE opis:='nie ma aktualnej pensji '; END CASE; DBMS_OUTPUT.PUT_LINE(opis); 4. Napisać kod bloku anonimowego PL/SQL, za pomocą którego dla dowolnej osoby zadanej przez jej id w odpowiednio zainicjowanej PL/SQL - owej zostanie wyświetlony odpowiedni komunikat dotyczący daty urodzenia. Osoba o id = 1 tj. Lis Jan urodził się w październiku. Zastosować instrukcje CASE sprawdzająca. zm_id osoby.id%type:=2; zm_dane VARCHAR(40); zm_mies NUMBER(2); zm_miesiac VARCHAR(15); SELECT imie1 ' ' nazwisko, TO_NUMBER(TO_CHAR(d_ur,'mm')) INTO zm_dane, zm_mies FROM osoby WHERE id=zm_id; CASE zm_mies WHEN 1 THEN zm_miesiac:='styczeniu'; WHEN 2 THEN zm_miesiac:='lutym'; WHEN 3 THEN zm_miesiac:='marcu'; WHEN 4 THEN zm_miesiac:='kwietniu'; WHEN 5 THEN zm_miesiac:='maju'; WHEN 6 THEN zm_miesiac:='czerwcu'; WHEN 7 THEN zm_miesiac:='lipiecu'; WHEN 8 THEN zm_miesiac:='sierpniu'; WHEN 9 THEN zm_miesiac:='wrzesniu'; WHEN 10 THEN zm_miesiac:='pazdzierniku'; WHEN 11 THEN zm_miesiac:='listopadzie'; WHEN 12 THEN zm_miesiac:='grudniu'; END CASE; DBMS_output.put_line('osoba o id= ' zm_id 'tj. ' zm_dane ' urodzila sie w ' zm_miesiac ''); 5. Napisać kod bloku anonimowego PL/SQL, za pomocą którego dla pierwszych 10 osób zostanie wyświetlony komunikat 1. Lis Jan ma inicjały L.J. 2. Kot Adam ma inicjały K.A Murek Danuta ma inicjały M.D. a) zastosować pętle prosta b) zastosować pętle WHILE licznik NUMBER:=1; 8

9 o_in1 CHAR(1); o_in2 CHAR(1); o_imie osoby.imie%type; o_naz osoby.nazwisko%type; LOOP SELECT nazwisko, imie1, SUBSTR(nazwisko,1,1), SUBSTR(imie1,1,1) INTO o_imie, o_naz, o_in1, o_in2 FROM osoby WHERE id=licznik; EXIT WHEN licznik=10; END LOOP; Ćwiczenia 6 (Instrukcje SQL) 1. Napisać kod bloku anonimowego PL/SQL, który umożliwia zwrot identyfikatora wiersza danych zmodyfikowanego instrukcja DML. W tym celu do tabeli osoby wprowadzić przykładowy wiersz danych id=12, nazwisko='tomczyk', imie='monika', d_ur='21/01/1987',plec='k' i wydrukować identyfikator wprowadzonego wiersza danych. Następnie dla wiersza danych tabeli osoby, którego identyfikator jest równy identyfikatorem wprowadzonego wiersza danych dodać operacje aktualizacji d_ur='12/01/1987' pobrać nazwisko, imię, i datę urodzenia osoby aktualizowanej a następnie je wydrukować. W końcu dokonać operacji usunięcia wiersza danych z tabeli osoby którego identyfikator jest równy identyfikatorowi wprowadzonego wiersza. Pobrać ten identyfikator i wydrukować go. o_rowid ROWID; o_id osoby.id%type; o_imie osoby.imie1%type; o_nazwisko osoby.nazwisko%type; o_data osoby.d_ur%type; o_plec osoby.plec%type; INSERT INTO osoby(id, nazwisko,imie1,imie2, d_ur, plec) VALUES (12,'Tomczyk','Monika', NULL, TO_DATE('21/01/1987','dd/mm/yyyy'), 'K') RETURNING rowid INTO o_rowid; DBMS_OUTPUT.PUT_LINE('indentyfikator wstawionego wiersza' o_rowid ' '); UPDATE osoby SET d_ur=to_date('12/01/1987', 'dd/mm/yyyy') WHERE rowid=o_rowid RETURNING nazwisko, imie1, d_ur INTO o_nazwisko, o_imie, o_data; DBMS_OUTPUT.PUT_LINE( ' ' o_nazwisko ' ' o_imie ' ' o_data ' '); DELETE FROM osoby WHERE rowid=o_rowid RETURNING rowid INTO o_rowid; DBMS_OUTPUT.PUT_LINE( 'indentyfikator usunietego wiersza to ' o_rowid ' '); 9

10 2. Napisać kod bloku anonimowego PL/SQL wykorzystującego pętle numeryczna w celu wyświetlenia z listy osób aktualnie zatrudnionych na każdym wydziale (liczba wydziałów i osób jest dowolna) Lista osób aktualnie zatrudniona na wydziale Fizyka 1. Norek Tadeusz 2. Kula Katarzyna 3. Murek Danuta Lista osób aktualnie zatrudniona na wydziale Matematyka 1. Kot Adam 2. Lis Anna z_licznik1 BINARY_INTEGER:=1; z_licznik2 BINARY_INTEGER:=1; z_ile1 NUMBER(2); z_ile2 NUMBER(2); w_nazwa wydzialy.nazwa%type; o_nazwisko osoby.nazwisko%type; o_imie osoby.imie1%type; SELECT COUNT(id) INTO z_ile1 FROM wydzialy; FOR z_licznik1 IN 1..z_ile1 LOOP SELECT nazwa INTO w_nazwa FROM wydzialy WHERE id=z_licznik1; DBMS_OUTPUT.PUT_LINE('Lista osob aktualnie zatrudnionych na wydziale ' w_nazwa ''); SELECT COUNT(*) INTO z_ile2 FROM zatrudnienia; WHERE id_wydz=z_licznik AND do IS null; FOR z_licznik2 IN 1..z_ile2 SELECT o.imie1, o.nazwisko INTO o_imie, o_nazwisko FROM osoby o, zatrudnienia z WHERE o.id=z.id_os AND z.id_wydz=z_licznik And z.do is null; DBMS_OUTPUT.PUT_LINE('' z_licznik2 ' ' o_nazwisko '' o_imie ' '); END LOOP; END LOOP; 3. Napisać kod bloku anonimowego PL/SQL wykorzystującego pętle numeryczna w celu wyświetlenia listy osób aktualnie zatrudnionych w poszczególnych rokach i miesiącach (poczynając od aktualnego roku a kończąc na najstarszym 10

11 Ćwiczenia 7 (kursory) 1a) Napisać kod bloku anonimowego PL/SQL z wykorzystaniem kursora jawnego, którego dla dowolnej osoby z tabeli osoby będzie wyświetlał komunikat: "Osoba nazwisko i imię ma inicjały" Wykorzystac: * petla prosta * petle while zm_imie1 osoby.imie1%type; zm_nazwisko osoby.nazwisko%type; zm_in1 CHAR(1); zm_in2 CHAR(1); CURSOR k_osoby IS SELECT imie1, INITCAP(nazwisko), SUBSTR(imie1,1,1), SUBSTR(nazwisko,1,1) FROM osoby; OPEN k_osoby; LOOP FETCH k_osoby INTO zm_imie1, zm_nazwisko, zm_in1,zm_in2; EXIT WHEN k_osoby%notfound; DBMS_OUTPUT.PUT_LINE('Osoba ' zm_imie1 ' ' zm_nazwisko ' ma inicjaly ' zm_in1 '.' zm_in2 '. '); END LOOP; CLOSE k_osoby; 1b) zm_imie1 osoby.imie1%type; zm_nazwisko osoby.nazwisko%type; zm_in1 CHAR(1); zm_in2 CHAR(1); CURSOR k_osoby IS 11

12 SELECT imie1, INITCAP(nazwisko), SUBSTR(imie1,1,1), SUBSTR(nazwisko,1,1) FROM osoby; zm_dane k_osoby%rowtype; OPEN k_osoby; FETCH k_osoby INTO zm_imie1, zm_nazwisko, zm_in1,zm_in2; WHILE k_osoby%found LOOP DBMS_OUTPUT.PUT_LINE('Osoba ' zm_imie1 ' ' zm_nazwisko ' ma inicjaly ' zm_in1 '.' zm_in2 '. '); FETCH k_osoby INTO zm_imie1, zm_nazwisko, zm_in1,zm_in2; END LOOP; CLOSE k_osoby; 2 Napisać kod bloku anonimowego PL/SQL z kursorem jawnym (z blokada), którego zadaniem jest podniesienie o 50zl aktualnej pensji osoba aktualnie zatrudnionym, które jeszcze nie miały podwyżki. Transakcje zatwierdzić. z_id osoby.id%type; CURSOR k_aktualizacja IS SELECT o.id FROM pensje p, zatrudnienia z, osoby o WHERE o.id = z.id_os AND o.id = p.id_os AND z.do IS NULL AND o.id IN ( SELECT id_os FROM pensje GROUP BY id_os HAVING COUNT(*) <= 1 ) FOR UPDATE OF p.pensja; OPEN k_aktualizacja; FETCH k_aktualizacja INTO z_id; WHILE k_aktualizacja%found LOOP DBMS_OUTPUT.PUT_LINE(z_id); UPDATE pensje SET pensja = pensja + 50 WHERE id_os = z_id; FETCH k_aktualizacja INTO z_id; END LOOP; COMMIT; 3 Mamy dokonać podwyżki pensji aktualnej pensji osobom aktualnie zatrudnionym. Każda z tych osób ma dostać taka kwotę podwyżki, jaka wynika z okresu jej pracy na danym wydziale za każdy przepracowany rok osoba dostaje podwyżkę w wysokości 3% kwoty swojej aktualnej pensji. Transakcje zatwierdzić. zm_id pensje.id_os%type; zm_pensja pensje.pensja%type; CURSOR k_pensja IS 12

13 SELECT z.id_os,trunc((months_between(sysdate,p.od)/12)*0.03*p.pensja+p.pensja) koncowa FROM pensje p,zatrudnienia z WHERE p.id_os=z.id_os AND p.do IS NULL AND z.do IS NULL; OPEN k_pensja; LOOP FETCH k_pensja INTO zm_id, zm_pensja; EXIT WHEN k_pensja%notfound; UPDATE pensje SET pensja=zm_pensja WHERE id_os=zm_id; END LOOP; CLOSE k_pensja; COMMIT; Ćwiczenia 8 (obsługa wyjątków) 1. Zaprojektować blok w którym w jego części wykonawczej zmiennej z_nazwisko typu VARCHAR(10) przypisano wartość 'Nowak-Konopacka'. Zaprojektować obsługę tego błędu za pomocą wyjątku predefiniowanego, przy czym obsługa błędu polega na wyświetleniu komunikatu:"zbyt długi ciąg znaków alfanumerycznych" z_nazwisko VARCHAR2(10); z_nazwisko:='nowak-konopacka'; EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_LINE ('Zbyt dlugi ciag znakow alfanumerycznych'); 2. Zaprojektować blok PL/SQL z kursorem niejawnym którego zadaniem jest wyświetlanie osób aktualnie zatrudnionych i liczbę pełnych przepracowanych lat w danym miejscu zatrudnienia, przy czym należy wyświetlić te osoby których liczba lat jest większa (mniejsza) niż liczba podawana w pewnej zmiennej. Zaprojektować obsługę wyjątków poprzez wyjątki predefiniowane które wyłapią wszystkie możliwe błędy i wyświetla odpowiednie komentarze. Dodatkowo zaprojektować poprzez wyjątek predefiniowany obsługę dowolnego błędu. z_liczba NUMBER:=10; z_imie osoby.imie1%type; z_nazwisko osoby.nazwisko%type; z_lata NUMBER; SELECT o.imie1, o.nazwisko,trunc((months_between(sysdate, z.od))/12) 13

14 INTO z_imie,z_nazwisko,z_lata FROM zatrudnienia z, osoby o WHERE o.id=z.id_os AND z.do IS NULL AND TRUNC((MONTHS_BETWEEN(SYSDATE, z.od))/12) > z_liczba; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('nie znaleziono danych'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('za duzo danych'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('inny blad'); 3. Do bazy danych został a wprowadzona osoba o id=11, której dane zostały wprowadzone blednie. Należy zaprojektować obsługę wyjątków, która wyłapie wszystkie te błędy i wyświetli komentarze: a)data urodzenia jest późniejsza niż data zatrudnienia! b)data zatrudnienia jest późniejsza niż data zwolnienia! c)data urodzenia jest późniejsza niż data zatrudnienia i data zatrudnienia jest późniejsza niż data zwolnienia! z_id osoby.id%type:=11; z_data_zat zatrudnienia.od%type:='23/11/1999'; z_data_zwol zatrudnienia.do%type:='21/02/1989'; z_data_ur osoby.d_ur%type:='12/06/1970'; wyjatek1 EXCEPTION; wyjatek2 EXCEPTION; wyjatek3 EXCEPTION; INSERT INTO osoby(id, nazwisko,imie1,imie2, d_ur, plec) VALUES (11,'Nowak','Monika', NULL, TO_DATE('z_data_ur','DD/MM/YYYY'),'K'); INSERT INTo zatrudnienia(id,id_os, od,do,id_wydz) VALUES (11,11,TO_DATE('z_data_zat','DD/MM/YYYY'),TO_DATE('z_data_zwol','DD/MM/YYYY' ),2); IF z_data_ur > z_data_zat THEN RAISE wyjatek1; ELSIF z_data_zat > z_data_zwol THEN RAISE wyjatek2; ELSIF z_data_ur > z_data_zat AND z_data_zat > z_data_zwol THEN RAISE wyjatek3; END IF; EXCEPTION WHEN wyjatek1 THEN DBMS_OUTPUT.PUT_LINE('data urodzenia jest pozniejsza niz data zatrudnienia'); WHEN wyjatek2 THEN 14

15 DBMS_OUTPUT.PUT_LINE('data zatrudnienia jest pozniejsza niz data zwolnienia '); WHEN wyjatek3 THEN DBMS_OUTPUT.PUT_LINE('data urodzenia jest pozniejsza niz data zatrudnienia i data zatrudnienia jest pozniejsza niz data zwolnienia '); 4. Zaprojektować blok PL/SQL-owy z kursorem niejawnym którego zadaniem jest wyświetlenie id osoby i jej inicjałów osób, które mają drugie imię. Zaprojektować obsługę wyjątków. Za pomocą wyjątku predefiniowanego, który obsługuje dowolny błąd. Obsługa polega na wpisaniu do tabeli tabela_bledow kodu wykrytego błędu i przypisanego mu komentarza (max. 200 znaków długości). osoba osoby%rowtype; in1 CHAR(1); in2 CHAR(1); komentarz VARCHAR(200); SELECT id, nazwisko, imie1, imie2, d_ur, plec, SUBSTR(nazwisko,1,1), SUBSTR(imie1,1,1) INTO osoba, in1,in2 FROM osoby WHERE imie2 IS NOT NULL; DBMS_OUTPUT.PUT_LINE('dane osoby: ' id.osoba ' ' imie1.osoba ' ' imie2.osoba ' ' nazwisko.osoba ' ' d_ur.osoba ' ' plec.osoba ' inicjaly: ' in1 ' ' in2); EXCEPTION WHEN NO_DATA_FOUND THEN komentarz:='nie znaleziono danych'; INSERT INTO tab_bledow VALUES(-1403,komentarz); WHEN TOO_MANY_ROWS THEN komentarz:='za duzo danych'; INSERT INTO tab_bledow VALUES(-1422,komentarz); WHEN OTHERS THEN komentarz:='inny blad'; INSERT INTO tab_bledow VALUES(0,komentarz); 5. W zadaniu z pętlami numerycznymi FOR, które umożliwiały w poszczególnych latach i ich miesiącach wyświetlenie liczby, zatrudnionych osób tak zaprojektować obsługę wyjątków, aby wyświetliły również te lata i ich miesiące, w których nikogo nie zatrudniono (tj. z lista zatrudnionych osób) 15

16 Ćwiczenia 9 (podprogramy: procedury, funkcje) 1. Zaprojektować procedurę, które umożliwi wprowadzanie danych osoby do tabeli osoby. Należy przy tym zaprojektować obsługę błędów wprowadzono do tabeli osoby danych osoby już wprowadzonej. CREATE OR REPLACE PROCEDURE nowa (i_id IN osoby.id%type, i_nazwisko IN osoby.nazwisko%type, i_imie1 IN osoby.imie1%type, i_imie2 IN osoby.imie2%type, i_d_ur IN osoby.d_ur%type, i_plec IN osoby.plec%type) AS INSERT INTO osoby(id, nazwisko, imie1, imie2, d_ur, plec) VALUES(i_id, i_nazwisko, i_imie1, i_imie2, i_d_ur, i_plec); EXCEPTION END nowa; DBMS_OUTPUT.PUT_LINE('Dane zostaly wprowadzone!'); WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.PUT_LINE('Taka osoba juz istnieje!'); EXECUTE nowa (20, 'Kowalski', 'Jan', 'Janek', TO_DATE('13/10/1985','dd/mm/yyyy'), 'm'); 2.Zaprojektowac procedurę i funkcje w języku PL/SQL, która umożliwia obliczenie osób danej płci w tabeli osoby. Następnie wywołać podprogramy PL/SQL. W środowisku SQL i wynik wydrukować. CREATE OR REPLACE PROCEDURE liczosoby( z_plec osoby.plec%type) AS liczba NUMBER; SELECT count(id) ilosc INTO liczba FROM osoby WHERE plec=z_plec; --RAISE APPLICATION_ERROR(liczba,'Liczba osob'); END liczosoby; liczosoby('k'); CREATE OR REPLACE FUNCTION liczbaosob ( z_plec osoby.plec%type ) 16

17 RETURN NUMBER IS liczba NUMBER; SELECT count(id) ilosc INTO liczba FROM osoby WHERE plec=z_plec; RETURN liczba; END liczbaosob; z_plec osoby.plec%type:='m'; liczba NUMBER; liczba:=liczbaosob(z_plec); DBMS_OUTPUT.PUT_LINE('Liczba osob o danej plci ' z_plec ' wynosi ' liczba); 3. Zaprojektować funkcje PL/SQL, która dla danego wydziału poda informacje o procencie osób aktualnie zatrudnionych osób na nim w stosunku do liczby wszystkich osób aktualnie zatrudnionych w następujący sposób: "Wydział zatrudnia ponad 50% ogółu zatrudnionych" lub "Wydział zatrudnia ponad 25% ogółu zatrudnionych" lub "Wydział zatrudnia poniżej 25% ogółu zatrudnionych" lub "Na wydziale nikt nie jest zatrudniony" zastosować konstrukcje bloku funkcyjnego z więcej niż jedna instrukcja RETURN. Drukowanie wyniku działania funkcji w bloku. Wyniki wydrukować dla wszystkich wydziałów. CREATE OR REPLACE FUNCTION l_zatrudnionych (z_wydzial wydzialy.nazwa%type) RETURN VARCHAR2 IS l_wydz NUMBER; l_wszyscy NUMBER; SELECT count(o.id) ilosc INTO l_wszyscy FROM osoby o, zatrudnienia z WHERE o.id=z.id_os AND z.do IS NULL; SELECT count(o.id) ilosc INTO l_wydz FROM osoby o, zatrudnienia z,wydzialy w WHERE o.id=z.id_os AND z.do IS NULL AND z.id_wydz=w.id AND w.nazwa=z_wydzial; IF (l_wydz/l_wszyscy)*100 >= 50 THEN RETURN 'Wydzial zatrudnia ponad 50% ogolu zatrudnionych'; ELSIF (l_wydz/l_wszyscy)*100 BETWEEN 25 AND 50 THEN RETURN 'Wydzial zatrudnia ponad 25% ogolu zatrudnionych'; ELSIF (l_wydz/l_wszyscy)*100 BETWEEN 0 AND 25 THEN 17

18 END IF; RETURN 'Wydzial zatrudnia ponizej 25% ogolu zatrudnionych'; END l_zatrudnionych; z_wydzial wydzialy.nazwa%type:='fizyka'; komentarz VARCHAR2(100); komentarz:=l_zatrudnionych(z_wydzial); DBMS_OUTPUT.PUT_LINE(z_wydzial ' ' komentarz); z_wydzial:='matematyka'; komentarz:=l_zatrudnionych(z_wydzial); DBMS_OUTPUT.PUT_LINE(z_wydzial ' ' komentarz); z_wydzial:='prawo'; komentarz:=l_zatrudnionych(z_wydzial); DBMS_OUTPUT.PUT_LINE(z_wydzial ' ' komentarz); 4. Zaprojektować procedurę zwracającą wartość największej pensji osoby aktualnie zatrudnionej której wypłacanie rozpoczęto w podanym roku. Ponadto procedura ma zwracać wartość największej aktualnie wypłacanej pensji osobie aktualnie zatrudnionej. Obie wartości wydrukować w bloku wywołania. CREATE OR REPLACE PROCEDURE pensja ( z_rok NUMBER ) AS z_pensja pensje.pensja%type; z_naj_pensja pensje.pensja%type; SELECT MAX(p.pensja) pensja INTO z_pensja FROM pensje p, osoby o, zatrudnienia z WHERE o.id=p.id_os AND o.id=z.id_os AND z.do IS NULL AND p.do IS NULL AND TO_NUMBER(TO_CHAR(p.od,'YYYY'))=z_rok; SELECT MAX(p.pensja) pensja INTO z_naj_pensja FROM pensje p, osoby o, zatrudnienia z WHERE o.id=p.id_os AND o.id=z.id_os AND z.do IS NULL AND p.do IS NULL; DBMS_OUTPUT.PUT_LINE(z_pensja ' ' z_naj_pensja); END pensja; pensja(1999); 18

19 Ćwiczenia 10 (pakiety) 1. Mamy zaprojektować pakiet zawierający (globalnie) dostępne: procedurę wprowadzanie danych nowej osoby do tabeli osoby, procedurę usuwania danych osoby już wprowadzonej do tabeli, przy czym musi ona zawierać obsługę deklarowanego przez użytkownika błędu nie znalezienia rekordu do usunięcia, procedurę ( z pętlą prostą) wyświetlającą listę aktualnie zatrudnionych osób a wydziale wskazanym przez swoją nazwę oraz błąd użytkownika w_osobanieznaleziona. CREATE OR REPLACE PACKAGE osoba AS PROCEDURE dodajosobe ( z_id osoby.id%type, z_nazwisko osoby.nazwisko%type, z_imie1 osoby.imie1%type, z_imie2 osoby.imie2%type, z_data osoby.d_ur%type, z_plec osoby.plec%type ); PROCEDURE usunosobe ( z_id osoby.id%type); w_osobanieznaleziona EXCEPTION; PROCEDURE zatrudnieni ( z_wydzial wydzialy.nazwa%type ); END osoba; CREATE OR REPLACE PACKAGE BODY osoba AS PROCEDURE dodajosobe ( z_id osoby.id%type, z_nazwisko osoby.nazwisko%type, z_imie1 osoby.imie1%type, z_imie2 osoby.imie2%type, z_data osoby.d_ur%type, z_plec osoby.plec%type ) AS INSERT INTO osoby(id,nazwisko,imie1,imie2,d_ur,plec) VALUES(z_id,z_nazwisko,z_imie1,z_imie2,z_data,z_plec); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.PUT_LINE('Osoba o podanym id juz istnieje w bazie!'); WHEN OTHERS THEN 19

20 DBMS_OUTPUT.PUT_LINE('Inny blad!'); END dodajosobe; PROCEDURE usunosobe ( z_id osoby.id%type) AS w_osobanieznaleziona EXCEPTION; DELETE FROM osoby WHERE id=z_id; IF SQL%NOTFOUND THEN RAISE w_osobanieznaleziona; END IF; EXCEPTION WHEN w_osobanieznaleziona THEN DBMS_OUTPUT.PUT_LINE('Osoby o podanym id nie znaleziono w tabeli'); END usunosobe; PROCEDURE zatrudnieni (z_wydzial wydzialy.nazwa%type ) AS z_nazwisko osoby.nazwisko%type; z_imie1 osoby.imie1%type; CURSOR k_osoby IS SELECT o.nazwisko, o.imie1 FROM osoby o,wydzialy w, zatrudnienia z WHERE o.id=z.id_os AND z.id_wydz=w.id AND z.do IS NULL AND w.nazwa=z_wydzial; OPEN k_osoby; LOOP FETCH k_osoby INTO z_nazwisko, z_imie1; EXIT WHEN k_osoby%notfound; DBMS_OUTPUT.PUT_LINE('' z_imie1 ' ' z_nazwisko ''); END LOOP; CLOSE k_osoby; END zatrudnieni; END osoba; 20

PODSTAWY BAZ DANYCH 13. PL/SQL

PODSTAWY BAZ DANYCH 13. PL/SQL PODSTAWY BAZ DANYCH 13. PL/SQL 1 Wprowadzenie do języka PL/SQL Język PL/SQL - rozszerzenie SQL o elementy programowania proceduralnego. Możliwość wykorzystywania: zmiennych i stałych, instrukcji sterujących

Bardziej szczegółowo

Bazy Danych 2007/2008 by Dzik.

Bazy Danych 2007/2008 by Dzik. Ćwiczenia 1 powtórzenie z SQL Bazy Danych 2007/2008 by Dzik. 1. Wyswietlic nazwy i liczbe zatrudnionych z tych wydzialow o najwiekszej liczba aktualnie zatrudnionych osob WITH pomoc AS (SELECT w.nazwa,

Bardziej szczegółowo

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ]; Braki w SQL obsługi zdarzeń i sytuacji wyjątkowych funkcji i procedur użytkownika definiowania złożonych ograniczeń integralnościowych Proceduralny SQL Transact- SQL używany przez Microsoft SQL Server

Bardziej szczegółowo

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne Materiały dostępne są na stronie: Materiały Technologie baz danych aragorn.pb.bialystok.pl/~gkret Wykład 5: Kursory jawne. Podprogramy. Małgorzata Krętowska Wydział Informatyki Politechnika Białostocka

Bardziej szczegółowo

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu Procedury składowane Kolejnym typem programu języka PL/SQL są procedury składowane. Procedury mogą posiadać parametry typu IN, OUT lub IN OUT. Umożliwiają wykonanie operacji na danych w bazie, mogą też

Bardziej szczegółowo

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Cheatsheet PL/SQL Andrzej Klusiewicz  1/9 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,

Bardziej szczegółowo

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków...

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków... Plan wykładu Spis treści 1 Kursory 1 2 Wyjątki 4 2.1 Wyjątki predefiniowane............................. 4 2.2 Wyjątki niezdefiniowane wcześniej....................... 5 2.3 Definiowanie własnych wyjątków........................

Bardziej szczegółowo

PL/SQL. Zaawansowane tematy PL/SQL

PL/SQL. Zaawansowane tematy PL/SQL PL/SQL Zaawansowane tematy PL/SQL Cele Poznanie złożonych i referencyjnych typów danych Poznanie konstrukcji kursora Poznanie kodu składowanego Poznanie procedur i funkcji 2 Złożone typy danych RECORD

Bardziej szczegółowo

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL Plan wykładu Uzupełnienie projektu fizycznego Czym jest PL/SQL Bloki w PL/SQL Zmienne i stałe Instrukcje sterujące Wykorzystanie SQL w PL/SQL Kursory Wyjątki Projekt fizyczny bazy danych Braki projektu

Bardziej szczegółowo

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze Cechy bloków nazwanych: w postaci skompilowanej trwale przechowywane na serwerze wraz z danymi wykonywane na żądanie użytkownika lub w

Bardziej szczegółowo

Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków.

Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków. Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków. 1 Komunikaty o błędach serwera Oracle Wykonanie niepoprawnej operacji w trakcie działania

Bardziej szczegółowo

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa) Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski Uniwersytet Kardynała Stefana Wyszyńskiego, Warszawa dwunasty PL/SQL, c.d. 1 / 37 SQL to za mało SQL brakuje możliwości dostępnych w językach proceduralnych.

Bardziej szczegółowo

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1 Kursory i wyjątki Kursory i praca z kursorami, kursory jawne i niejawne, otwieranie kursora, pobieranie z kursora, zamykanie kursora, wyjątki systemowe i użytkownika, zgłaszanie i obsługa wyjątków 1 Kursor

Bardziej szczegółowo

Październik 2015. Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

Październik 2015. Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż. 1/40 Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Październik 2015 2/40 Plan wykładu Uzupełnienie projektu fizycznego Czym jest PL/SQL Bloki w PL/SQL Wykorzystanie 3/40 Projekt

Bardziej szczegółowo

Deklarowanie kursora

Deklarowanie kursora Kursory i wyjątki Kursory i praca z kursorami, kursory jawne i niejawne, otwieranie kursora, pobieranie z kursora, zamykanie kursora, wyjątki systemowe i użytkownika, zgłaszanie i obsługa wyjątków 1 Kursor

Bardziej szczegółowo

Procedury i funkcje składowane

Procedury i funkcje składowane Procedury i funkcje składowane Zmienne podstawienia i zmienne wiązane, podprogramy, procedury składowane, typy argumentów, wywoływanie procedur, funkcje składowane, poziomy czystości funkcji, funkcje tablicowe

Bardziej szczegółowo

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki. Pakiety Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki. Pakiet składa się ze: specyfikacji (interfejsu) i ciała (implementacji). W specyfikacji mieszczą

Bardziej szczegółowo

Bloki anonimowe w PL/SQL

Bloki anonimowe w PL/SQL Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia

Bardziej szczegółowo

Język PL/SQL Procedury i funkcje składowane

Język PL/SQL Procedury i funkcje składowane Język PL/SQL Procedury i funkcje składowane Podprogramy, procedury i funkcje składowane, typy argumentów, wywoływanie procedur i funkcji, poziomy czystości funkcji 1 Podprogramy Procedury (wykonują określone

Bardziej szczegółowo

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL;

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL; Kursory Każde zapytanie SQL umieszczone w programie PLSQL jest wykonywane w tzw. obszarze roboczym lub inaczej obszarze kontekstu. PLSQL wykorzystuje ten obszar do przechowywania danych otrzymanych w wyniku

Bardziej szczegółowo

15. Funkcje i procedury składowane PL/SQL

15. Funkcje i procedury składowane PL/SQL 15. Funkcje i procedury składowane PLSQL 15.1. SQL i PLSQL (Structured Query Language - SQL) Język zapytań strukturalnych SQL jest zbiorem poleceń, za pomocą których programy i uŝytkownicy uzyskują dostęp

Bardziej szczegółowo

1. ELEMENTY JĘZYKA PL/SQL

1. ELEMENTY JĘZYKA PL/SQL 1. ELEMENTY JĘZYKA PL/SQL Aplikacje korzystające z PL/SQL będącego proceduralnym rozszerzeniem SQL mogą wykonywać procedury i funkcje języka PL/SQL składowane w bazie danych oraz wysyłać własne programy

Bardziej szczegółowo

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych Plan wykładu BAZY DANYCH II WYKŁAD 3 Zasięg zmiennych Zmienne powiązane Instrukcje warunkowe Pętle Pobieranie danych SQL w PL/SQL Rekordy dr inż. Agnieszka Bołtuć Zasięg zmiennych Zmienna jest dostępna

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 2 Kusory Wprowadzenie Kursory użytkownika Kursory domyślne Zmienne kursora Wyrażenia kursora - 2 - Wprowadzenie Co to jest kursor?

Bardziej szczegółowo

DECLARE VARIABLE zmienna1 typ danych; BEGIN

DECLARE VARIABLE zmienna1 typ danych; BEGIN Procedury zapamiętane w Interbase - samodzielne programy napisane w specjalnym języku (właściwym dla serwera baz danych Interbase), który umożliwia tworzenie zapytań, pętli, instrukcji warunkowych itp.;

Bardziej szczegółowo

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL.

Bardziej szczegółowo

Język PL/SQL. Rozdział 2. Kursory

Język PL/SQL. Rozdział 2. Kursory Język PL/SQL. Rozdział 2. Kursory Deklarowanie kursora, otwieranie kursora, pobieranie z kursora, zamykanie kursora, zmienne kursorowe, wyrażenie CURSOR, kursory niejawne. 1 Kursor jawny Każde zapytanie

Bardziej szczegółowo

Pakiety podprogramów Dynamiczny SQL

Pakiety podprogramów Dynamiczny SQL Pakiety podprogramów Dynamiczny SQL Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL 1 Pakiety Pakiet (ang. package)

Bardziej szczegółowo

BAZY DANYCH W APLIKACJACH SIECIOWYCH

BAZY DANYCH W APLIKACJACH SIECIOWYCH BAZY DANYCH W APLIKACJACH SIECIOWYCH Wykład 4 Wyjątki. Wyzwalacze bazodanowe. (Wybrane materiały) Dr inż. E. Busłowska Obsługa wyjątków w PLSQL Wyjątek (ang. Exception) - błąd lub ostrzeżenie w PLSQL Typy

Bardziej szczegółowo

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH Plan wykładu 2 TWORZENIE APLIKACJI BAZODANOWYCH Wykład 2: Wprowadzenie do PL/SQL: bloki anonimowe, zmienne, kursory Wprowadzenie do PL/SQL Bloki Podstawowe składowe języka Zmienne i stałe Kursory Małgorzata

Bardziej szczegółowo

1. Przykładowe pytania z SQL

1. Przykładowe pytania z SQL 2005/2006 - PRZYKŁADOWE PYTANIA NA ZALICZENIE PODSTAWY BAZ DANYCH -1-1. Przykładowe pytania z SQL 1. Wybrać wszystkie dane osób o nazwisku zawierającym wewnątrz literę a. 2. Wyznaczyć dane osobowe osób,

Bardziej szczegółowo

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2) Kursor jawny Każde zapytanie SQL umieszczone w programie PL/SQL może zwrócić zero, jedną bądź wiele krotek. Aby efektywnie przetworzyć krotkizwrócone przez zapytanie korzystamy z kursorów. Kursor jest

Bardziej szczegółowo

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko Typy rozproszonych baz Systemy typu klient-serwer (jeden serwer) Jednorodna rozproszona baza (kilka serwerow, jeden system zarzadzania baza ) Niejednorodna

Bardziej szczegółowo

Oracle Developer Suite. Budowa aplikacji użytkownika końcowego

Oracle Developer Suite. Budowa aplikacji użytkownika końcowego Oracle Developer Suite Budowa aplikacji użytkownika końcowego Składniki pakietu Oracle Developer Suite Oracle Forms Builder formularze (aplikacje dostępne z poziomu przeglądarki internetowej, model 3-warstwowy)

Bardziej szczegółowo

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń PL/SQL Zaawansowane tematy PL/SQL Piotr Medoń Cele Omówienie transakcji bazodanowych Omówienie obsługi wyjątków Zarządzanie perspektywami Tworzenie i usuwanie sekwencji Budowa wyzwalaczy 2 Transakcje bazodanowe

Bardziej szczegółowo

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL, Mój projekt przedstawia bazę danych noclegów składającą się z 10 tabel. W projekcie wykorzystuje program LibreOffice Base do połączenia psql z graficznym interfejsem ( kilka formularzy przedstawiających

Bardziej szczegółowo

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora Kursor Rozdział 10a Kursory Kursory i praca z kursorami, kursory jawne i niejawne, otwieranie kursora, pobieranie z kursora, zamykanie kursora, zmienne kursorowe, wyrażenie CURSOR Każde zapytanie SQL umieszczone

Bardziej szczegółowo

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń PL/SQL Część 1 Bloki PL/SQL Piotr Medoń Cele Zapoznanie się z podstawowymi typami PL/SQL Zapoznanie się z blokiem PL/SQL Zapoznanie się z instrukcjami sterującymi wykonaniem 2 Blok PL/SQL Struktura bloku

Bardziej szczegółowo

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów SQL3 wprowadza następujące kolekcje: zbiory ( SETS ) - zestaw elementów bez powtórzeń, kolejność nieistotna listy ( LISTS ) - zestaw

Bardziej szczegółowo

Tabele wykorzystywane w przykładach

Tabele wykorzystywane w przykładach Tabele wykorzystywane w przykładach create table departamenty( dep_id serial primary key, nazwa_departamentu text ); Tabele używane w wybranych przkładach create table pracownicy ( emp_id serial primary

Bardziej szczegółowo

BAZA DANYCH SIECI HOTELI

BAZA DANYCH SIECI HOTELI Paulina Gogół s241906 BAZA DANYCH SIECI HOTELI Baza jest częścią systemu zarządzającego pewną siecią hoteli. Składa się z tabeli powiązanych ze sobą różnymi relacjami. Służy ona lepszemu zorganizowaniu

Bardziej szczegółowo

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Obiektowe bazy danych Ćwiczenia laboratoryjne (?) Obiektowe bazy danych Ćwiczenia laboratoryjne (?) Tworzenie typów obiektowych 1. Zdefiniuj typ obiektowy reprezentujący SAMOCHODY. Każdy samochód powinien mieć markę, model, liczbę kilometrów oraz datę

Bardziej szczegółowo

PL/SQL. Lidia Małkiewicz i Cezary Skubała

PL/SQL. Lidia Małkiewicz i Cezary Skubała PL/SQL Lidia Małkiewicz i Cezary Skubała Jest językiem trzeciej generacji (3GL), który udostępnia konstrukty programistyczne, włączając w to deklaracje zmiennych, pętlę, obsługę błędów itd. Obecnie PL/SQL

Bardziej szczegółowo

Język PL/SQL Pakiety podprogramów

Język PL/SQL Pakiety podprogramów Język PL/SQL Pakiety podprogramów Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora) 1 Pakiety Pakiet (ang. package) grupuje powiązane

Bardziej szczegółowo

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE, Programowanie w SQL definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE, kontynuacja działania od instrukcji za podaną etykietą GOTO etykieta, wyjście bezwarunkowe

Bardziej szczegółowo

1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10

1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10 Plan wykładu Spis treści 1 Wprowadzenie do bloków nazwanych 1 2 Parametry 2 3 Procedury i funkcje 3 4 Pakiety 6 5 Podsumowanie 10 6 Źródła 10 1 Wprowadzenie do bloków nazwanych Rodzaje bloków w PL/SQL

Bardziej szczegółowo

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Składowe wyzwalacza ( ECA ): określenie zdarzenia ( Event ) określenie

Bardziej szczegółowo

Technologie baz danych WYKŁAD 7: Wyjątki

Technologie baz danych WYKŁAD 7: Wyjątki Wydział Informatyki Politechnika Białostocka Obsługa wyjątków Technologie baz danych WYKŁAD 7: Wyjątki [] [] Agnieszka Oniśko, Małgorzata Krętowska TBD-wyjątki 1 TBD-wyjątki 2 Sposoby powstania sytuacji

Bardziej szczegółowo

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok; Temat: Funkcje, procedury i wyzwalacze. Oprócz tabel i widoków w bazach danych możemy tworzyć własne funkcje, procedury i specjalny typ procedur, które będą automatycznie wywoływanie przez MySQL w memencie

Bardziej szczegółowo

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Wyzwalacze. Anna Fiedorowicz Bazy danych 2 Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 5 Wprowadzenie Tworzenie i wykonywanie procedur i funkcji Instrukcja RETURN Parametry procedur i funkcji oraz ich przesyłanie Metadane

Bardziej szczegółowo

Bloki anonimowe w PL/SQL

Bloki anonimowe w PL/SQL Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia

Bardziej szczegółowo

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika Programowanie w SQL procedury i funkcje UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika 1. Funkcje o wartościach skalarnych ang. scalar valued

Bardziej szczegółowo

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: Grupa A (LATARNIE) Imię i nazwisko: Numer albumu: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: Nazwisko prowadzącego: 11: 12: Suma: Ocena: Zad. 1 (10 pkt) Dana jest relacja T. Podaj wynik poniższego zapytania (podaj

Bardziej szczegółowo

Hurtownia Świętego Mikołaja projekt bazy danych

Hurtownia Świętego Mikołaja projekt bazy danych Aleksandra Kobusińska nr indeksu: 218366 Hurtownia Świętego Mikołaja projekt bazy danych Zaprezentowana poniżej baza jest częścią większego projektu bazy danych wykorzystywanej w krajowych oddziałach wiosek

Bardziej szczegółowo

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1 Procedury wyzwalane procedury wyzwalane, cel stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie wyzwalaczami 1 Procedury wyzwalane

Bardziej szczegółowo

Plan wykładu BAZY DANYCH II WYKŁAD 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone

Plan wykładu BAZY DANYCH II WYKŁAD 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone Plan wykładu Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone BAZY DANYCH II WYKŁAD 5 dr inż. Agnieszka Bołtuć Kolekcje Tablice asocjacyjne Używane w celu gromadzenia danych tego samego typu, Rekordy

Bardziej szczegółowo

Składowane procedury i funkcje

Składowane procedury i funkcje Składowane procedury i funkcje Procedury i funkcje są zestawem poleceń SQL, które są przechowywane na serwerze (tak jak dane w tablicach). Istnieją sytuacje, kiedy procedury i funkcje są szczególnie przydatne.

Bardziej szczegółowo

Zaawansowane bazy danych i hurtownie danych semestr I

Zaawansowane bazy danych i hurtownie danych semestr I Podprogramy Wydział Informatyki Politechnika Białostocka Zaawansowane bazy danych i hurtownie danych semestr I Procedury do przeprowadzenia akcji Funkcje do obliczania wartości Pakiety do zbierania logicznie

Bardziej szczegółowo

Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów

Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów Plan wykładu Kursory: deklaracja, otwieranie, pobieranie danych, zamykanie Kursory: atrybuty Kursory: pętle, rekordy Kursory z parametrami BAZY DANYCH II WYKŁAD 4 dr inż. Agnieszka Bołtuć Co to jest kursor?

Bardziej szczegółowo

Wprowadzenie do języka PL/SQL. Język PL/SQL Wprowadzenie. Struktura blokowa programu. Przykładowy program w PL/SQL. Zmienne rekordowe.

Wprowadzenie do języka PL/SQL. Język PL/SQL Wprowadzenie. Struktura blokowa programu. Przykładowy program w PL/SQL. Zmienne rekordowe. Wprowadzenie do języka PL/SQL Język PL/SQL Wprowadzenie Język PL/SQL to rozszerzenie SQL o elementy programowania proceduralnego i obiektowego. PL/SQL umożliwia wykorzystanie: zmiennych i stałych struktur

Bardziej szczegółowo

Język PL/SQL Wprowadzenie

Język PL/SQL Wprowadzenie Język PL/SQL Wprowadzenie Koncepcja języka, zmienne i stałe, typy zmiennych, nadawanie wartości zmiennym, instrukcje warunkowe, pętle, sterowanie przebiegiem programu 1 Wprowadzenie do języka PL/SQL Język

Bardziej szczegółowo

Struktura bazy danych

Struktura bazy danych Procedury składowane, funkcje i wyzwalacze Struktura bazy danych Tabela Oddziały ID Nazwa Adres 10 POZNAN Kwiatowa 3 20 WARSZAWA al. Jerozolimskie 22 30 KRAKOW Planty 14 40 WROCLAW Nad Odra 16 50 GDANSK

Bardziej szczegółowo

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u będziemy używać w taki sam sposób, jak wbudowanych funkcji

Bardziej szczegółowo

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Prezentacja Danych i Multimedia II r Socjologia Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Celem ćwiczeń jest poznanie zasad tworzenia baz danych i zastosowania komend SQL. Ćwiczenie I. Logowanie

Bardziej szczegółowo

Bazy danych 2 Laboratorium 2

Bazy danych 2 Laboratorium 2 Język PLSQL: złożony język programowania, dzięki któremu mamy możliwość uzyskać dostęp do bazy danych Oracle z różnych środowisk; jest to język zintegrowany z serwerem bazy danych, co ma wpływ na szybkość

Bardziej szczegółowo

Język PL/SQL Wprowadzenie

Język PL/SQL Wprowadzenie Język PL/SQL Wprowadzenie Koncepcja języka, zmienne i stałe, typy zmiennych, nadawanie wartości zmiennym, instrukcje warunkowe, pętle, sterowanie przebiegiem programu 1 Wprowadzenie do języka PL/SQL Język

Bardziej szczegółowo

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze 1 Funkcje i procedury pamiętane Następujące polecenie tworzy zestawienie zawierające informację o tym ilu jest na naszej hipotetycznej

Bardziej szczegółowo

Wykład 5. SQL praca z tabelami 2

Wykład 5. SQL praca z tabelami 2 Wykład 5 SQL praca z tabelami 2 Wypełnianie tabel danymi Tabele można wypełniać poprzez standardową instrukcję INSERT INTO: INSERT [INTO] nazwa_tabeli [(kolumna1, kolumna2,, kolumnan)] VALUES (wartosc1,

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 8 Wprowadzenie Definiowanie typu obiektowego Porównywanie obiektów Tabele z obiektami Operacje DML na obiektach Dziedziczenie -

Bardziej szczegółowo

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle Rozszerzenie obiektowe w SZBD Oracle Cześć 2. Kolekcje Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Malinowski Nowak Kowalski tablica zagnieżdżona (ang.

Bardziej szczegółowo

OBSŁUGA WYJĄTKÓW. Mechanizm języka PL/SQL. Wyjątki:

OBSŁUGA WYJĄTKÓW. Mechanizm języka PL/SQL. Wyjątki: OBSŁUGA WYJĄTKÓW W języku PL/SQL zaimplementowano obsługę błędów za pomocą: mechanizmu wyjątków programów obsługi wyjątków w tzw. sekcji obsługi wyjątków. Wyjątki mogą być związane z: błędami systemu Oracle

Bardziej szczegółowo

Kursory - pobieranie danych z baz danych do programów PL/SQL

Kursory - pobieranie danych z baz danych do programów PL/SQL Kursory - pobieranie danych z baz danych do programów PL/SQL Rozważania będą dotyczyć sposobów pobierania danych z baz danych do programów przechowywanych w pamięci. Interakcja języka PL/SQL z językiem

Bardziej szczegółowo

Wykład 8. SQL praca z tabelami 5

Wykład 8. SQL praca z tabelami 5 Wykład 8 SQL praca z tabelami 5 Podzapytania to mechanizm pozwalający wykorzystywać wyniki jednego zapytania w innym zapytaniu. Nazywane często zapytaniami zagnieżdżonymi. Są stosowane z zapytaniami typu

Bardziej szczegółowo

ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW

ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW Położenie podprogramów Jak wiemy, podprogramy i pakiety jako bloki nazwane, mogą być składowane w słowniku danych. Podprogram najpierw tworzy się za pomocą polecenia

Bardziej szczegółowo

PL/SQL. Zaawansowane tematy PL/SQL

PL/SQL. Zaawansowane tematy PL/SQL PL/SQL Zaawansowane tematy PL/SQL Cele Przypomnienie kursorów Przypomnienie procedur i funkcji składowanych Poznanie pakietów składowanych 2 Bazę danych Oracle możemy traktować jakby była złożona z dwóch

Bardziej szczegółowo

1. Wyzwalacze BD (ang. triggers)

1. Wyzwalacze BD (ang. triggers) 1. Wyzwalacze BD (ang. triggers) Wyzwalacz bazy danych jest procedurą składowaną w bazie powiązaną z jedną konkretną tablicą. Z pojedynczą tablicą może być związane wiele wyzwalaczy, natomiast pojedynczy

Bardziej szczegółowo

PODSTAWY BAZ DANYCH. 17. Obiektowość w Oracle. 2009/2010 Notatki do wykładu "Podstawy baz danych"

PODSTAWY BAZ DANYCH. 17. Obiektowość w Oracle. 2009/2010 Notatki do wykładu Podstawy baz danych PODSTAWY BAZ DANYCH 17. Obiektowość w Oracle 1 Obiektowa baza danych Obiektowe bazy danych (OBD) powstały początkowo jako rozwinięcie programowania obiektowego. Bazy danych zorientowane obiektowo przechowują

Bardziej szczegółowo

SQL 4 Structured Query Lenguage

SQL 4 Structured Query Lenguage Wykład 5 SQL 4 Structured Query Lenguage Instrukcje sterowania danymi Bazy Danych - A. Dawid 2011 1 CREATE USER Tworzy nowego użytkownika Składnia CREATE USER specyfikacja użytkownika [, specyfikacja użytkownika]...

Bardziej szczegółowo

Zaawansowane bazy danych i hurtownie danych semestr I

Zaawansowane bazy danych i hurtownie danych semestr I Ważne informacje Wydział Informatyki Politechnika Białostocka Zaawansowane bazy danych i hurtownie danych semestr I WYKŁAD 1: Wprowadzenie do przedmiotu, proceduralny język SQL 1. Sylabus w USOS ie: Ogólny

Bardziej szczegółowo

Indeksy. Indeks typu B drzewo

Indeksy. Indeks typu B drzewo Indeksy dodatkowe struktury służące przyśpieszeniu dostępu do danych o użyciu indeksu podczas realizacji poleceń decyduje SZBD niektóre systemy bazodanowe automatycznie tworzą indeksy dla kolumn o wartościach

Bardziej szczegółowo

W PostgreSQL mamy do dyspozycji nie tylko funkcje wbudowane, ale również możemy tworzyć własne. Są one zapisywane w tabeli systemowej pg_proc.

W PostgreSQL mamy do dyspozycji nie tylko funkcje wbudowane, ale również możemy tworzyć własne. Są one zapisywane w tabeli systemowej pg_proc. PROCEDURY W PostgreSQL mamy do dyspozycji nie tylko funkcje wbudowane, ale również możemy tworzyć własne. Są one zapisywane w tabeli systemowej pg_proc. \df Aby wyświetlić wszystkie funkcje z argumentami

Bardziej szczegółowo

Bazy danych, 4. wiczenia

Bazy danych, 4. wiczenia Bazy danych, 4. wiczenia 2007-10-23 1 Plan zaj PL/SQL, cz ± II: tabele kursory sªu» ce do zmiany danych, procedury, funkcje, pakiety, wyzwalacze. 2 Tabele Deklaracja TYPE t_tab IS TABLE OF VARCHAR(20)

Bardziej szczegółowo

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Język PL/SQL. Rozdział 6. Procedury wyzwalane Język PL/SQL. Rozdział 6. Procedury wyzwalane Procedury wyzwalane, cele stosowania, typy wyzwalaczy, wyzwalacze na poleceniach DML i DDL, wyzwalacze typu INSTEAD OF, przykłady zastosowania, zarządzanie

Bardziej szczegółowo

11 marca Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

11 marca Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż. 1/41 Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska 11 marca 2017 2/41 Plan wykładu 1 2 3 4 3/41 PL/SQL PL/SQL (ang. Procedural Language/Structured Query Language) - język programowania

Bardziej szczegółowo

Procedury Funkcje Pakiety. Tworzenie procedury

Procedury Funkcje Pakiety. Tworzenie procedury Podprogramy tworzy się za pomocą instrukcji CREATE. Tworzenie procedury Składnia CREATE [OR REPLACE] PROCEDURE nazwa_procedury [(param1 [IN OUT IN OUT] typ_danych [:= DEFAULT wyrażenie], param2 [IN OUT

Bardziej szczegółowo

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Laboratorium nr 4. Temat: SQL część II. Polecenia DML Laboratorium nr 4 Temat: SQL część II Polecenia DML DML DML (Data Manipulation Language) słuŝy do wykonywania operacji na danych do ich umieszczania w bazie, kasowania, przeglądania, zmiany. NajwaŜniejsze

Bardziej szczegółowo

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze Funkcje użytkownika Tworzenie funkcji Usuwanie funkcji Procedury składowane Tworzenie procedur składowanych Usuwanie procedur składowanych Wyzwalacze Wyzwalacze a ograniczenia i procedury składowane Tworzenie

Bardziej szczegółowo

Multimedialne bazy danych - laboratorium

Multimedialne bazy danych - laboratorium Multimedialne bazy danych - laboratorium Oracle Multimedia (rozwiązania) Celem ćwiczenia jest zapoznanie się z obiektowymi typami danych Oracle dedykowanymi do obsługi multimediów. Autor ćwiczenia: Marek

Bardziej szczegółowo

2 PL/SQL - podstawy Zmienne i stałe Operatory SQL w PL/SQL Instrukcje sterujące... 8

2 PL/SQL - podstawy Zmienne i stałe Operatory SQL w PL/SQL Instrukcje sterujące... 8 Plan wykładu Spis treści 1 Wprowadzenie 1 2 PL/SQL - podstawy 1 2.1 Zmienne i stałe................................. 3 2.2 Operatory.................................... 6 2.3 SQL w PL/SQL.................................

Bardziej szczegółowo

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT ); Projekt ilustruje przykładową bazę domowej biblioteczki. Baza ma za zadanie ułatwić skatalogowanie posiadanych książek wraz z podstawowymi informacjami na ich temat. Opis bazy: Książka może mieć wielu

Bardziej szczegółowo

Struktury sterowania PL/SQL

Struktury sterowania PL/SQL Struktury sterowania PL/SQL Istnieje często potrzeba posiadania przez dany język programowania pewnych mechanizmów, dzięki którym istnieje możliwość odpowiedniego reagowania na wszelkie możliwe sytuacje

Bardziej szczegółowo

Systemy baz danych 2 laboratorium Projekt zaliczeniowy

Systemy baz danych 2 laboratorium Projekt zaliczeniowy Dany jest następujący logiczny schemat bazy danych Systemy baz danych 2 laboratorium Projekt zaliczeniowy FAKTURY POZYCJE PK f_id_faktury PK p_id_pozycji f_data_wystawienia f_data_płatnosci f_czy_zaplacona

Bardziej szczegółowo

Podprogramy. Rozdział 11 Procedury i funkcje składowane

Podprogramy. Rozdział 11 Procedury i funkcje składowane Podprogramy Rozdział 11 Procedury i funkcje składowane Podprogramy, procedury składowane, funkcje składowane, wywoływanie podprogramów Przez podprogramy rozumiemy głównie: procedury (wykonują określone

Bardziej szczegółowo

Wykład 9. Pakiety w języku PL/SQL

Wykład 9. Pakiety w języku PL/SQL Wykład 9. Pakiety w języku PL/SQL Pakiety (ang. packages): podobnie jak podprogramy, zaliczamy do bloków nazwanych języka PL/SQL, zostały zaczerpnięty z języka ADA, lecz w stosunku do pakietu tego języka

Bardziej szczegółowo

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych SQL SQL (ang. Structured Query Language): strukturalny język zapytań używany do tworzenia strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych

Bardziej szczegółowo

Język PL/SQL. Rozdział 4. Procedury i funkcje składowane

Język PL/SQL. Rozdział 4. Procedury i funkcje składowane Język PL/SQL. Rozdział 4. Procedury i funkcje składowane Podprogramy, procedury składowane, funkcje składowane, wywoływanie podprogramów. (c) Instytut Informatyki Politechniki Poznańskiej 1 Podprogramy

Bardziej szczegółowo

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych

Bardziej szczegółowo

Plan wykładu BAZY DANYCH II WYKŁAD 2. Bloki. Struktura bloku

Plan wykładu BAZY DANYCH II WYKŁAD 2. Bloki. Struktura bloku Plan wykładu BAZY DANYCH II WYKŁAD 2 Bloki, struktura, sekcje Bloki anonimowe Tworzenie i uruchamianie Identyfikatory Literały Typy danych dr inż. Agnieszka Bołtuć Bloki Struktura bloku W programach pisanych

Bardziej szczegółowo

SQL (ang. Structured Query Language)

SQL (ang. Structured Query Language) SQL (ang. Structured Query Language) SELECT pobranie danych z bazy, INSERT umieszczenie danych w bazie, UPDATE zmiana danych, DELETE usunięcie danych z bazy. Rozkaz INSERT Rozkaz insert dodaje nowe wiersze

Bardziej szczegółowo