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

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

Procedury i funkcje składowane

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

PL/SQL. Zaawansowane tematy PL/SQL

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

PODSTAWY BAZ DANYCH 13. PL/SQL

Pakiety podprogramów Dynamiczny SQL

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

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

Plan wykładu BAZY DANYCH II WYKŁAD 7. Pakiety. Zalety pakietów

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

Bloki anonimowe w PL/SQL

Język PL/SQL Pakiety podprogramów

PL/SQL. Zaawansowane tematy PL/SQL

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

Zaawansowane bazy danych i hurtownie danych semestr I

Oracle PL/SQL. Paweł Rajba.

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

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Indeksy. Indeks typu B drzewo

Bloki anonimowe w PL/SQL

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

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

Bazy danych, 4. wiczenia

Podprogramy. Rozdział 11 Procedury i funkcje składowane

Hurtownia Świętego Mikołaja projekt bazy danych

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

BAZA DANYCH SIECI HOTELI

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

SQL 4 Structured Query Lenguage

Składowane procedury i funkcje

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

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

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

Tworzenie raportów XML Publisher przy użyciu Data Templates

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

15. Funkcje i procedury składowane PL/SQL

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

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

Tabele wykorzystywane w przykładach

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

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

Ćwiczenia 2 IBM DB2 Data Studio

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

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

Ćwiczenie 13 PL/SQL. Język PL/SQL procedury, funkcje, pakiety, wyzwalacze

Procedury Funkcje Pakiety. Tworzenie procedury

Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL

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

Deklarowanie kursora

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

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

1. ELEMENTY JĘZYKA PL/SQL

Zaawansowane bazy danych i hurtownie danych semestr I

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 6. Co to są wyjątki? Co to są wyjątki?

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Bazy danych. Plan wykładu. Złczenia tabel. Perspektywy cd. Wykład 9: Programowanie aplikacji baz danych po stronie serwera. Sekwencje Wyzwalacze

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

Oracle PL/SQL. Paweł Rajba.

ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW

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

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

SQL :: Data Definition Language

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

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Multimedialne bazy danych - laboratorium

Ćwiczenie 13 PL/SQL. Język PL/SQL procedury, funkcje, pakiety, wyzwalacze

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

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

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

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

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

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

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

Oracle PL/SQL. Paweł Rajba.

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

Plan wykładu BAZY DANYCH II WYKŁAD 8. Wyzwalacze. Wyzwalacze

BAZY DANYCH W APLIKACJACH SIECIOWYCH

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

Oracle 12c: Nowości w SQL i PL/SQL

Zaawansowane bazy danych i hurtownie danych semestr I, st. niestacjonarne

Bazy danych 11. SQL Procedury składowane, kursory i wyzwalacze

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

Systemowe aspekty baz danych

Oracle PL/SQL. Paweł Rajba.

Technologie baz danych WYKŁAD 7: Wyjątki

Projekt-bazy danych Poczta

W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP).

Comarch ERP XL Business Intelligence Start. Migracja do wersji 2018

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

1. Wyzwalacze BD (ang. triggers)

Instrukcja instalacji aplikacji PlanSoft.org

Monika Sychla Daniel Smolarek Projekt bazy danych

Zarządzanie bazą danych. Bazy Danych i Systemy informacyjne Wykład 4. Piotr Syga

Obowiązuje od wersji

Oracle PL/SQL. Paweł Rajba.

Transkrypt:

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 wyniku zajścia zdarzenia funkcje i procedury mogą ( nie muszą ) posiadać parametry posiadają specyfikację i ciało część deklaracyjna funkcji, procedur i pakietów NIE rozpoczyna się od słowa DECLARE Parametry umożliwiają przekazywanie wartości między środowiskiem wywołującym a programem w deklaracji programu występują parametry formalne, dla których nie podaje się rozmiaru typu definicja parametru formalnego <nazwa> [ <tryb> ] typ [{ := DEFAULT } <wartość >] Tryby przekazywania parametru IN ( domyślnie ) - przekazywanie wartości zmiennej do programu, parametr aktualny to literał lub zmienna, parametr traktowany wewnątrz programu jak stała OUT parametr aktualny jest zmienną, do której ( na zewnątrz) będzie przekazywana wartość, wewnątrz programu jest traktowany jako niezainicjalizowana zmienna IN OUT parametr aktualny jest zmienną posiadającą wartość, która jest przekazywana do programu, wewnątrz jest traktowany jak zainicjalizowana zmienna, przez którą można zwrócić wartość na zewnątrz programu CREATE [ OR REPLACE ] FUNCTION <Nazwa> [ ( <par1> [IN OUT IN OUT ] <typ> [, <par2>... ] ) ] RETURN< typ> [ < deklaracje ;>] <blok_instrukcji ;> RETURN < wyrażenie ;> [EXCEPTION <obsługa_wyjątków ; >] END [ <Nazwa>] ; 1

przykłady: CREATE OR REPLACE FUNCTION Dwa_imiona ( p_nr_albumu IN Studenci.Nr_albumu%TYPE ) RETURN BOOLEAN AS v_robo NUMBER:=0; SELECT instr(imiona,',') INTO v_robo FROM Studenci WHERE Nr_albumu = p_nr_albumu; IF v_robo <> 0 THEN RETURN FALSE; ELSE RETURN TRUE; END Dwa_imiona; FOR v_rec IN ( SELECT nr_albumu, nazwisko FROM Studenci WHERE rok = 1) LOOP IF Dwa_imiona( v_rec.nr_albumu) THEN DBMS_output.put_line(v_Rec.nazwisko ' ma dwa imiona '); END LOOP; CREATE OR REPLACE FUNCTION Odsetki(kwota NUMBER, okres NUMBER) RETURN NUMBER IS kwota_odsetek NUMBER:=0 ; IF okres between 1 and 30 THEN kwota_odsetek := kwota*0.01 ; ELSIF okres between 31 and 60 THEN kwota_odsetek := kwota*0.02 ; ELSE kwota_odsetek := kwota*0.05 ; END IF ; RETURN kwota_odsetek ; END Odsetki ; Wywołanie funkcji: SELECT Odsetki( 325, 21 ) FROM Dual ; SELECT nazwisko_imie, r.kwota, Odsetki(r.kwota,(sysdate-data_do_zaplaty)) FROM Odbiorcy JOIN Rachunki r ON ( kod_odbiorcy=dla_kogo ) WHERE... ; 2

CREATE [ OR REPLACE ] PROCEDURE <Nazwa> [ ( <par_1> [IN OUT IN OUT ] <typ> [, <par_2>... ] ) ] [ <deklaracje ;>] <blok_instrukcji> ; [EXCEPTION <obsługa_wyjatków ; >] END [ <Nazwa> ] ; przykład: CREATE TABLE Wyniki ( Kol1 VARCHAR2( 30 ), Kol2 VARCHAR2( 10 ), Kol3 NUMBER( 4 ) ) ; CREATE OR REPLACE PROCEDURE Losowanie( Ilu NUMBER, p_rezyser VARCHAR2 ) IS CURSOR Bufor ( p_rezyser VARCHAR2) IS SELECT Tytul, Kraj, Rok FROM Filmy WHERE upper(rezyser) = p_rezyser ORDER BY DBMS_RANDOM.value() ; TYPE T_rec IS RECORD ( Tytul VARCHAR2(40), Kraj VARCHAR2(10), Rok NUMBER(4)); Robo T_rec; DELETE FROM Wyniki ; OPEN Bufor( p_rezyser) ; LOOP FETCH Bufor INTO Robo ; EXIT WHEN (Bufor%ROWCOUNT >Ilu ) OR ( Bufor%NOTFOUND ) ; INSERT INTO Wyniki VALUES( Robo.Tytul, Robo.Kraj, Robo.Rok ) ; END LOOP ; CLOSE Bufor ; END Losowanie ; Wywołanie procedury CALL Losowanie ( 5, Wajda Andrzej') ; EXECUTE Losowanie ( 3, ' ) ; 3

Pakiet zbiór logicznie powiązanych zmiennych, stałych, kursorów, wyjątków, procedur, funkcji itp., tworzących jeden nazwany, przechowywany trwale w bazie danych Składowe pakietu: specyfikacja ( interfejs ) - dostępna dla aplikacji ciało ( implementacja ) - ukryte, opcjonalne Specyfikacja pakietu CREATE [ OR REPLACE ] PACKAGE <Nazwa> < publiczne-deklaracje >; < specyfikacja_podprogramów>; END [ <Nazwa>]; Ciało pakietu CREATE [ OR REPLACE ] PACKAGE BODY <Nazwa> <prywatne_deklaracje>; < definicje_podprogramów >; [ < instrukcje_inicjalizujące>; ] END [< Nazwa> ]; Przykład z dokumentacji Oracle http://docs.oracle.com/cd/b19306_01/server.102/b14200/statements_6007.htm#i20653 83 CREATE OR REPLACE PACKAGE emp_mgmt AS FUNCTION hire (last_name VARCHAR2, job_id VARCHAR2, manager_id NUMBER, salary NUMBER, commission_pct NUMBER, department_id NUMBER) RETURN NUMBER; FUNCTION create_dept(department_id NUMBER, location_id NUMBER) RETURN NUMBER; PROCEDURE remove_emp(employee_id NUMBER); PROCEDURE remove_dept(department_id NUMBER); PROCEDURE increase_sal(employee_id NUMBER, salary_incr NUMBER); PROCEDURE increase_comm(employee_id NUMBER, comm_incr NUMBER); no_comm EXCEPTION; no_sal EXCEPTION; END emp_mgmt; / 4

CREATE OR REPLACE PACKAGE BODY emp_mgmt AS tot_emps NUMBER; tot_depts NUMBER; FUNCTION hire (last_name VARCHAR2, job_id VARCHAR2, manager_id NUMBER, salary NUMBER, commission_pct NUMBER, department_id NUMBER) RETURN NUMBER IS new_empno NUMBER; SELECT employees_seq.nextval INTO new_empno FROM DUAL; INSERT INTO employees VALUES (new_empno, 'First', 'Last','first.example@oracle.com', '(415)555-0100','18-JUN-02','IT_PROG',90000000,00, 100,110); tot_emps := tot_emps + 1; RETURN(new_empno); FUNCTION create_dept(department_id NUMBER, location_id NUMBER) RETURN NUMBER IS new_deptno NUMBER; SELECT departments_seq.nextval INTO new_deptno FROM dual; INSERT INTO departments VALUES (new_deptno, 'department name', 100, 1700); tot_depts := tot_depts + 1; RETURN(new_deptno); PROCEDURE remove_emp (employee_id NUMBER) IS DELETE FROM employees WHERE employees.employee_id = remove_emp.employee_id; tot_emps := tot_emps - 1; PROCEDURE remove_dept(department_id NUMBER) IS DELETE FROM departments WHERE departments.department_id = remove_dept.department_id; tot_depts := tot_depts - 1; SELECT COUNT(*) INTO tot_emps FROM employees; PROCEDURE increase_sal(employee_id NUMBER, salary_incr NUMBER) IS curr_sal NUMBER; SELECT salary INTO curr_sal FROM employees WHERE employees.employee_id = increase_sal.employee_id; IF curr_sal IS NULL THEN RAISE no_sal; ELSE UPDATE employees SET salary = salary + salary_incr WHERE employee_id = employee_id; 5

PROCEDURE increase_comm(employee_id NUMBER, comm_incr NUMBER) IS curr_comm NUMBER; SELECT commission_pct INTO curr_comm FROM employees WHERE employees.employee_id = increase_comm.employee_id; IF curr_comm IS NULL THEN RAISE no_comm; ELSE UPDATE employees SET commission_pct = commission_pct + comm_incr; END emp_mgmt; / DROP FUNCTION <Nazwa>; DROP PROCEDURE <Nazwa>; DROP PACKAGE [ BODY ] <Nazwa>; Pakiety wbudowane: DBMS_DATA_MINIG umożliwia drążenie danych DBMS_DATAPUMP ułatwia przenoszenie danych ( metadanych) między bazami danych DBMS_DIMISION używany głównie do obsługi hurtowni danych DBMS_JAVA umożliwia dostęp do mechanizmów języka Java w języku PL/SQL DBMS_OUTPUT narzędzie do diagnozowania DBMS_RANDOM zawiera generator liczb losowych bazujący na języku C DBMS_XMLGEN umożliwia transformację wyniku SELECT na format XML 6