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

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

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

Transkrypt

1 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 charakteryzuje się specyficznymi definicjami i zachowaniami, ogólnie rzecz ujmując, jest konstrukcją, która grupuje ze sobą logicznie powiązane elementy języka PL/SQL w jeden obiekt w tym ujęciu można stwierdzić, iż pakiet jest nazwaną sekcja deklaracji. stanowi wygodne rozwiązanie w języku PL/SQL, stanowiące pewien użyteczny mechanizm pozwalający na organizowanie kodu w taki sposób, aby umożliwić jego łatwiejsze rozwijanie i utrzymywanie. Elementami języka PL/SQL, które mogą być powiązane w jedną całość w ramach pakietu, mogą być: stałe, zmienne, kursory, wyjątki, procedury, funkcje, typy danych. W ramach pakietu te powyżej wymienione elementy języka PL/SQL mogą, choć nie muszą występować. Ponadto pakiet może zawierać dowolną liczbę poszczególnych elementów języka PL/SQL, które zostały powyżej wymienione, np. może zawierać dowolną liczbę procedur i funkcji. Korzyścią umieszczenia tych obiektów w pakiecie jest zapewnienie możliwości odwoływania się do nich z innych bloków PL/SQL. A zatem jednym z możliwych zastosowań pakietu jest możliwość zadeklarowania zmiennych globalnych PL/SQL w ramach jednej sesji bazy danych. Tworzenie i budowa pakietu Na ogół pakiety w języku PL/SQL składają się z dwóch oddzielnych części: specyfikacji (nagłówka), treści (ciała). Każda z tych dwóch części pakietu jest oddzielnie składowana w słowniku danych. Ogólnie rzecz ujmując, pakiet jest nazwaną sekcją deklaracji. Wszystkie obiekty, które mogą znajdować się w części deklaracji bloku, mogą znajdować się również w pakiecie. Celowo pakiet języka PL/SQL składa się z dwóch odrębnych obiektów (słownika). Taka budowa pakietu ma pozytywne konsekwencje, przede wszystkim jeśli chodzi o samo wykorzystanie pakietów w konkretnych zastosowaniach. Poniżej wymienione zostały pewne pozytywne cechy zastosowania pakietów, które są wynikiem takiej właśnie budowy pakietów: konserwacja oddzielając szczegóły implementacji od definicji, nie musimy rekompilować ani zmieniać programów, kiedy zmienia się ich implementacja. Jeśli ulega zmianie tzw. logika biznesowa procedury lub funkcji, zmianę tę można wdrożyć tylko na poziomie treści pakietu. W ten sposób odwoływanie się do programów pozostaje nienaruszone. bezpieczeństwo użytkowania wiąże się z możliwością ukrywania informacji. W razie konieczności zmiany struktury procedury lub funkcji umieszczonej w pakiecie, jak stwierdzono powyżej, odwoływanie się do tych podprogramów może pozostawać niezmienione. Dzięki temu pakiet jest bardziej bezpieczną strukturą, ponieważ 1

2 jego nagłówek się nie zmienia. Ponadto definiując prywatne obiekty w treści pakietu, ukryte one zostają przed innymi użytkownikami. Obiekty te pozostają obiektami prywatnymi danego pakietu. hermetyzacja i modularność powiązane w ramach pakietu obiekty zostają zhermetyzowane wewnątrz bazy danych jako pojedyncza jednostka składająca się z logiki aplikacji, co prowadzi również do modularności wydajność kiedy po raz pierwszy następuje odwołanie do spakowanego podprogramu, do pamięci ładowany jest cały pakiet. Zwiększa to wydajność, ponieważ następuje redukcja dyskowych operacji wejścia/wyjścia wynikających z kolejnych wywołań. Wśród deklaracji elementów języka PL/SQL w pakiecie wyróżniamy: deklaracje publiczne, deklaracje prywatne. Deklaracje publiczne: mają miejsce w specyfikacji pakietu wynika to z faktu, iż swym zasięgiem obejmują one całą sesję bazodanową, a zatem wszystkie programy mające dostęp do tego pakietu mogą się do nich odwoływać. Deklaracje prywatne: są pewnymi deklaracjami oraz pewnymi dodatkowymi procedurami i funkcjami zdefiniowanymi w treści pakietu, są zatem dostępne jedynie treści pakietu, nie są dostępne z poziomu innych aplikacji języka PL/SQL. Zalety konstrukcji pakietów języka PL/SQL: to, iż pakiet składa się z dwóch odrębnych części jest następstwem ułatwień w organizacji i konserwacji kodu oraz ukrywania pewnych informacji, jest dość oczywistym fakt, iż w momencie, kiedy oddzielimy szczegóły implementacji od definicji, nie musimy kompilować powtórnie ani zmieniać podprogramów, kiedy zmienia się ich implementacja, natomiast w przypadku, gdy ulega zmianie logika biznesowa procedury lub funkcji umieszczonej w pakiecie, zmiana ta może zostać wdrożona tylko na poziomie treści pakietu. A zatem odwoływanie się do podprogramów pozostaje nienaruszone, w ten sposób używanie pakietów jest bardziej bezpieczne niż pojedynczych elementów wchodzących w skład samego pakietu, ponieważ nagłówek pakietu nie ulega zmianie, natomiast fakt, iż niektóre informacje mogą zostać ukryte w momencie korzystania z pakietu, wynika z samej struktury pakietu otóż w ramach pakietu występują deklaracje prywatne, co powoduje, iż elementy, których one dotyczą są specyficzne tylko dla tego pakietu i są niewidoczne poza tym pakietem dla innych użytkowników. Różnice pakietów w stosunku do innych bloków nazwanych (podprogramów): w odróżnieniu od procedur i funkcji, które mogą albo znajdować się w bloku, albo być składowane w bazie danych, pakiety mogą być tylko składowane nigdy też nie mają zasięgu lokalnego, poza umożliwieniem wspólnego grupowania obiektów skojarzonych, użyteczność pakietów polega na ograniczeniu znaczenia faktu istnienia zależności pomiędzy obiektami, pakiety dają również pewne korzyści związane z wydajnością pracy aplikacji. 2

3 Tworzenie pakietów Do tworzenia pakietów służą dwa polecenia: CREATE PACKAGE dla specyfikacji pakietu CREATE PACKAGE BODY dla jego treści. Wykonanie obu poleceń wymaga od użytkownika uprawnienia systemowego CREATE PROCEDURE. Aby utworzyć pakiet w innym schemacie, trzeba posiadać uprawnienie systemowe CREATE ANY PROCEDURE. Specyfikacja pakietu Specyfikacja pakietu (ang. specification) (znana również jako nagłówek pakietu): zawiera informacje dotyczące zawartości pakietu, mówiąc inaczej, zawiera jedynie informacje o jego przeznaczeniu, ale nie ma tu żadnych wiadomości o sposobie jego wykonania, zawiera jedynie nagłówki podprogramów, a nie ich treści., jest to zatem pewien rodzaj sekcji deklaracyjnej, który występuje w programach języka PL/SQL. Składnia nagłówka pakietu jest następująca: CREATE [OR REPLACE] PACKAGE nazwa_pakietu {IS AS} definicja typu deklaracja stałej deklaracja zmiennej deklaracja wyjatku deklaracja kursora specyfikacja procedury specyfikacja funkcji END [nazwa_pakietu] gdzie: nazwa_pakietu jest nazwą pakietu, poszczególne definicje odpowiadają definicjom typów, stałych, zmiennych, wyjątków, kursorów, nagłówków procedur i funkcji. Poniżej został przedstawiony przykład niezbyt skomplikowanego nagłówka pakietu: CREATE OR REPLACE PACKAGE PakietPracowniczy AS -- Przydzielenie pracownika do odpowiedniej grupy wynagrodzeń. PROCEDURE DodajPracownika (p_pracownikid p_grupa IN grupy.grupa%type, p_stawkagodz IN grupy.stawka%type); -- Usunięcie pracownika z danej grupy wynagrodzeń. PROCEDURE UsunPracownika (p_pracownikid p_grupa IN grupy.grupa%type, p_stawkagodz IN grupy.stawka%type); -- Wyjątek zgłoszony przez procedurę UsunPracownika w_pracownikniewprowadzony EXCEPTION; 3

4 FUNCTION WynagrPracownika (p_prac p_premia p_liczbagodz END PakietPracowniczy; IN NUMBER, IN NUMBER) RETURN NUMBER; Pakiet PakietPracowniczy zawiera dwie procedury, jedną funkcję oraz wyjątek. Poniżej zostały wymienione zasady, które są specyficzne dla nagłówka pakietu: W specyfikacji nagłówka pakietu mają miejsce deklaracje takich samych elementów języka PL/SQL (np. zmiennych, specyfikacji procedur i funkcji, itd.), jakie mogłyby się znaleźć w sekcji deklaracji bloku anonimowego. Deklaracja tych elementów jest w zasadzie analogiczna do ich możliwych deklaracji w bloku anonimowym, z wyjątkiem deklaracji procedury i funkcji (patrz poniżej). Instrukcja definicji specyfikacji pakietu rozpoczyna się od wyrażenia CREATE OR REPLACE, natomiast poszczególne podprogramy w nagłówku mają postać: PROCEDURE nazwa_procedury lub FUNCTION nazwa_funkcji A zatem w deklaracji podprogramów nie występują wyrażenia CREATE OR REPLACE. Wynika to stąd, iż w przypadku języka PL/SQL cały kod pojedynczego pakietu jest tworzony, uaktualniany lub usuwany jednocześnie, dlatego sensowne jest zastosowanie jednej instrukcji CREATE. Elementy pakietu mogą pojawiać się w dowolnej kolejności (także w przykładzie przytoczonym powyżej). Jednak w sekcji deklaracji obiekt musi zostać zadeklarowany, zanim nastąpi do niego odwołanie. Jeżeli kursor zawiera zmienną, np. w części klauzuli WHERE, zmienna musi być zadeklarowana przed deklaracją kursora. Występowanie wszystkich typów elementów nie jest obowiązkowe. Pakiet może zawierać tylko specyfikacje procedury i funkcji, np. bez deklarowania wyjątków lub typów. Każda deklaracja dla procedury lub funkcji musi być deklaracją wyprzedzającą. Deklaracja wyprzedzająca po prostu opisuje podprogram oraz jego argumenty (jeżeli takie istnieją), ale nie zawiera kodu. Inaczej jest w sekcji deklaracji bloku, gdzie mogą się znajdować zarówno deklaracje wyprzedzające, jak i właściwy kod procedur i funkcji. Kod, który implementuje procedury i funkcje pakietu, znajduje się w treści pakietu. Istota stosowania pakietów wynika zatem z faktu korzystne jest niejednokrotnie ukrycie bardzo skomplikowanych rozwiązań programistycznych poprzez ich prostą prezentację w tym przypadku za pomocą pakietów. Treść pakietu Treść pakietu, zwana inaczej ciałem: jest oddzielnym obiektem słownika danych związanym z nagłówkiem pakietu, jego kompilacja się nie powiedzie, jeśli nagłówek pakietu nie zostanie wcześniej pomyślnie skompilowany, zawiera kod odpowiadający deklaracji wyprzedzającej podprogramu w nagłówku pakietu, może również zawierać dodatkowe deklaracje, które są globalne dla treści pakietu, ale niewidoczne dla specyfikacji. Innymi słowy, ciało pakietu jest tą lokalizacją, gdzie umieszcza się implementacje programów wymienionych w nagłówku danego pakietu. 4

5 CREATE OR REPLACE PACKAGE BODY PakietPracowniczy AS -- Przydzielenie pracownika do odpowiedniej grupy wynagrodzeń. PROCEDURE DodajPracownika (p_pracownikid p_grupa IN grupy.grupa%type, p_stawkagodz IN grupy.stawka%type) AS INSERT INTO grupy_pracownikow (pracownik_id, grupa, stawka) VALUES(p_PracownikId, p_grupa, p_stawkagodz); END DodajPracownika; -- Usunięcie pracownika z danej grupy wynagrodzeń. PROCEDURE UsunPracownika (p_pracownikid p_grupa IN grupy.grupa%type, p_stawkagodz IN grupy.stawka%type) AS DELETE FROM grupy_pracownikow WHERE pracownik_id = p_pracownikid AND grupa = p_grupa; /* Sprawdzenie, czy operacja DELETE powiodła się. Jeśli nie znaleziono wierszy do usunięcia zgłoszenie błędu */ IF SQL%NOTFOUND THEN RAISE w_pracownikniewprowadzony; END IF; END UsunPracownika; -- Poniższa funkcja zwraca wynagrodzenie pracownika FUNCTION WynagrPracownika (p_prac p_premia IN NUMBER, p_liczbagodz IN NUMBER) RETURN p_wynagrodzenie NUMBER IS z_stawka zatrudnienie.stawka%type; CURSOR k_stawka IS SELECT stawka INTO z_stawka FROM zatrudnienie WHERE id = p_prac; p_wynagrodzenie:= p_liczbagodz*z_stawka*(1 + p_premia); END WynagrPracownika; END PakietPracowniczy; Analizując choćby powyższą treść przykładowego pakietu PakietPracowniczy należy zwrócić uwagę na następujące cechy charakterystyczne dla ciał pakietów: wymaganym jest, aby nagłówek i treść pakietu miały taką samą nazwę. na początku pakietu nie występuje słowo. Należy odróżnić ten fakt od tego, iż sekcja + sekwencja instrukcji występuje na końcu pakietu. Jest to sekcja inicjalizacyjna i dla pakietu nie ma charakteru. 5

6 podczas deklarowania stałych, zmiennych, definiowania typów, wyjątków i/lub kursorów nie jest używane słowo kluczowe DECLARE. podczas deklarowania procedur i/lub funkcji nie jest używana klauzula CREATE OR REPLACE. deklaracje publiczne mogą występować w dowolnej kolejności, o ile zadeklarujemy je przed odwołaniem się do nich. A zatem treść pakietu zawiera kod dla deklaracji wyprzedzających umieszczonych w nagłówku pakietu. Może również zawierać dodatkowe zmienne, kursory, typy lub podprogramy. Do tych obiektów w nagłówku, które nie są deklaracjami wyprzedzającymi (np. wyjątek w_pracownikniewprowadzony), w treści pakietu można odwoływać się bez ponownego deklarowania. w przypadku kursorów, specyfikacja może zawierać jedynie nazwę kursora oraz jego typ zwrotny. W takim przypadku kursor trzeba całkowicie zdefiniować w treści pakietu. Jeśli nie zadeklarujemy przy nim typu zwrotnego, wtedy cały kursor, a także skojarzoną z nim instrukcję SELECT, należy zadeklarować w specyfikacji pakietu, i nie ma potrzeby powtarzać tej deklaracji w treści pakietu. treści podprogramów (procedur i funkcji) należy powtórzyć w treści pakietu, podając stosowne szczegóły ich implementacji. Należy przestrzegać następującej zasady: każdej z publicznych procedur i/lub funkcji zdefiniowanych w nagłówku pakietu, musi odpowiadać jej implementacja w ciele pakietu. Ponadto sygnatura każdej procedury lub funkcji w nagłówku powinna odpowiadać słowo w słowo sygnaturze w treści pakietu. Treść pakietu jest elementem opcjonalnym. Jeżeli nagłówek pakietu nie zawiera żadnych procedur lub funkcji (a jedynie deklaracje zmiennych, kursory, typy, itd.), to nie trzeba definiować treści. Taka technika przydaje się podczas deklarowania globalnych zmiennych i typów, ponieważ wszystkie obiekty znajdujące się w pakiecie są widoczne na zewnątrz pakietu. Jak wynika z powyżej przytoczonych własności specyfikacji pakietów, każda deklaracja wyprzedzająca występująca w nagłówku pakietu musi mieć swoje rozwinięcie w treści pakietu. Specyfikacja procedury lub funkcji musi być taka sama w obu przypadkach. Dotyczy to nazwy podprogramu, nazwy jego parametrów oraz ich trybu. Poniższy, przykładowy nagłówek pakietu nie odpowiada zawartości pakietu, ponieważ dla funkcji FunkcjaA w zawartości pakietu występuje inna lista parametrów: CREATE OR REPLACE PACKAGE PakietA IS FUNCTION FunkcjaA(p_Parametr1 IN NUMBER, p_parametr2 IN DATE) RETURN VARCHAR2; END PakietA; CREATE OR REPLACE PACKAGE BODY PakietA AS FUNCTION FunkcjaA(p_Parametr1 IN CHAR) RETURN VARCHAR2 IS; END PakietA; Podczas próby utworzenia pakietu PakietA wystąpią następujące błędy: PLS-00328: Należy zdefiniować treść dla deklaracji wyprzedzającej FUNCTIONA. PLS-00323: podprogram lub kursor FUNCTIONA jest zadeklarowany w specyfikacji pakietu i musi być zdefiniowany w treści pakietu. 6

7 Odwoływanie się do obiektów pakietu Obiekty publiczne Poszczególne obiekty, które są zdefiniowane w nagłówku pakietu, mają zasięg globalny w takim sensie, iż są dostępne dla całej sesji i dla wszystkich aplikacji, które dysponują wymaganymi uprawnieniami. Dlatego też noszą nazwę obiektów publicznych. Każdy obiekt zadeklarowany w nagłówku pakietu znajduje się w zakresie jest widoczny na zewnątrz pakietu poprzez podanie nazwy obiektu z nazwą pakietu. Przykładowo, za pomocą poniższego bloku PL/SQL można wywołać procedurę P1 z pakietu o nazwie Nazwa_Pakiet: DECLARE tekst1 VARCHAR2(100); Nazwa_Pakiet.Procedura_P1( 1234, IX, 1890, tekst1); IF tekst1<>0 THEN DBMS_OUTPUT.PUT_LINE(tekst1); END IF; END; Wywołanie procedury jest analogiczne do samodzielnej procedury, a jedyną różnicą jest to, że nazwę procedury poprzedza nazwa pakietu. Po wykonaniu procedury sterowanie przechodzi do wywołującego bloku PL/SQL, tak jak to ma miejsce w przypadku samodzielnej procedury. Procedury pakietowe mogą przyjmować wartości domyślne i być wywołane z zastosowaniem notacji pozycyjnej albo imiennej, podobnie jak dla składowanych, samodzielnych procedur. Do obiektów, które znajdują się w nagłówku, w treści pakietu można odwoływać się bez podawania nazwy pakietu. Przykładowo, procedura UsunPracownika może wywołać wyjątek za pomocą samej jego nazwy w_pracownikniewprowadzony zamiast nazwy kwalifikowanej UsunPracownika.w_PracownikNiewprowadzony. Oczywiście, taką nazwę także można stosować. Wskazówka: Jednym ze sposobów, który pozwala spełnić warunek, iż każdej z publicznych procedur i funkcji zdefiniowanych w nagłówku pakietu, musi odpowiadać jej implementacja w ciele pakietu, polega na tym, iż podprogramy w ciele pakietu należy umieszczać w tej samej kolejności, jak w przypadku specyfikacji pakietu (podprogramy prywatne uwzględnia się na początku, gdyż ze względu na wymagania kompilatora ich definicja musi znajdować się przed ewentualnym wywołaniem). W razie niezdefiniowania któregoś z podprogramów, które uprzednio zostały wymienione w specyfikacji, kompilator nie przeprowadzi kompilacji, dopóki ten błąd nie zostanie naprawiony. Zakres obiektów w treści pakietu W analizowanej postaci pakietu, procedury PakietPracowniczy.DodajPracownika oraz PakietPracowniczy.UsunPracownika po prostu uaktualniają tabelę grupy_pracownicy. Takie działanie nie jest jednak wystarczające. Procedury te powinny jeszcze uaktualniać tabelę pracownicy, w celu uwzględnienia w niej tych pracowników, którzy są wprowadzeni po raz pierwszy oraz tych, którzy zostali z niej usunięci. W tym celu w treści pakietu można dodać nową procedurę, co ilustruje poniższy przykład: CREATE OR REPLACE PACKAGE BODY PakietPracowniczy AS 7

8 /* Procedura narzędziowa uaktualniająca tabele pracownicy i grupy_pracownicy w celu uwzględnienia zmian. Jeżeli parametr p_dodano ma wartość TRUE, to tabele są uaktualniane w związku z dodaniem nowego pracownika do grupy uposażenia. Jeżeli ma wartość FALSE, to są uaktualniane w celu uwzględnienia usunięcia pracownika PROCEDURE UaktualnijTabPracownicy(p_Dodano IN BOOLEAN, p_id p_nazwisko IN pracownicy.nazwisko%type, p_imie IN pracownicy.imie%type, p_plec IN pracownicy.plec%type) AS IF p_dodano THEN INSERT INTO pracownicy VALUES(p_id, p_nazwisko, p_imie, p_plec); ELSE DELETE FROM pracownicy WHERE id = p_id; END IF; END UAKTUALNIJTabPracownicy; PROCEDURE DodajPracownika (p_pracownikid p_grupa IN grupy.grupa%type, p_stawkagodz IN grupy.stawka%type) AS INSERT INTO grupy_pracownikow (pracownik_id, grupa, stawka) VALUES(p_PracownikId, p_grupa, p_stawkagodz); END DodajPracownika; -- Usunięcie pracownika z danej grupy wynagrodzeń. PROCEDURE UsunPracownika (p_pracownikid p_grupa p_stawkagodz DELETE FROM grupy_pracownikow WHERE pracownik_id = p_pracownikid AND grupa = p_grupa; IN grupy.grupa%type, IN grupy.stawka%type) AS /* Sprawdzenie, czy operacja DELETE powiodła się. Jeśli nie znaleziono wierszy do usunięcia zgłoszenie błędu */ IF SQL%NOTFOUND THEN RAISE w_pracownikniewprowadzony; END IF; END UsunPracownika; FUNCTION WynagrPracownika (p_prac p_premia p_liczbagodz z_stawka zatrudnienie.stawka%type; IN NUMBER, IN NUMBER) RETURN NUMBER IS 8

9 CURSOR k_stawka IS SELECT stawka INTO z_stawka FROM zatrudnienie WHERE id = p_prac; p_wynagrodzenie:= p_liczbagodz*z_stawka*(1 + p_premia); END WynagrPracownika; END PakietPracowniczy; 9

10 Przeciążanie podprogramów pakietowych Pojęcie przeciążania zostało wprowadzone wraz z pojawieniem się koncepcji programowania zorientowanego obiektowo (Object-OrientedProgramming, OOP). Programowanie zorientowane obiektowo pozwala na postrzeganie wszystkich elementów związanych z programem jako pewnej całości, zwanej obiektem. Obiekty mogą zawierać tabele, programy i metody przetwarzania danych. Integracja tych elementów umożliwia stosowanie modułowej konstrukcji środowiska programowania. Znane przykłady języków opartych na modelu programowania zorientowanego obiektowo to Java i C++. Możliwość przeciążania pozwala na tworzenie wielu wersji tego samego podprogramu. To, która z nich będzie uruchamiana, zależy od argumentów przesłanych do tego podprogramu (funkcji). Istnieje możliwość przeciążania procedur i funkcji wewnątrz pakietu. Jak z powyższego określenia tej własności wynika, proces przeciążania (ang. overloading) oznacza, iż w pakiecie występuje więcej niż jedna procedura lub funkcja o tej samej nazwie, ale z różnymi parametrami. Jest to bardzo użyteczna cecha, ponieważ w ten sposób ta sama operacja może dotyczyć obiektów różnych typów. Na potrzeby poniższego przykładu przyjęto, że istnieje potrzeba dodania produktu wycofanego określonej kategorii i dostarczanego przez określonego dostawcę poprzez określenie numeru produktu albo poprzez określenie jego nazwy, co jest możliwe poprzez modyfikacje pakietu PakietProduktu. CREATE OR REPLACE PACKAGE PakietProduktu AS /* Dodanie nowego produktu o określonej kategorii i dostarczanego przez określonego dostawcę poprzez podanie numeru produktu */ PROCEDURE DodajProdukt ( p_nr_produkt IN produkty.nr_prod%type, p_kod_dostawca IN produkty.kod_dost%type, p_nazwa_kategoria IN produkty.nazwa_kat%type); /* Dodanie nowego produktu o określonej kategorii i dostarczanego przez określonego dostawcę poprzez podanie nazwy produktu */ PROCEDURE DodajProdukt (p_nazwa_produkt p_kod_dostawca p_nazwa_kategoria IN produkty.nazwa_prod%type, IN produkty.kod_dost%type, IN produkty.nazwa_kat%type);... END PakiektProdukt; CREATE OR REPLACE PACKAGE BODY PakietProdukt AS /* Dodanie nowego produktu o określonej kategorii i dostarczanego przez określonego dostawcę poprzez podanie numeru produktu */ PROCEDURE DodajProdukt (p_nr_produkt p_kod_dostawca p_nazwa_kategoria IN produkty.nr_prod%type, IN produkty.kod_dost%type, IN produkty.nazwa_kat%type) AS 10

11 INSERT INTO produkty_wycofane(nr_prod, kod_dost, nazwa_kat) VALUES(p_Nr_produkt, p_kod_dostawca, p_nazwa_kategoria); COMMIT; END DodajProdukt; /* Dodanie nowego produktu o określonej kategorii i dostarczanego przez określonego dostawcę poprzez podanie nazwy produktu */ PROCEDURE DodajProdukt (p_nazwa_produkt IN produkty.nazwa_prod%type, p_kod_dostawca IN produkty.kod_dost%type, p_nazwa_kategoria IN produkty.nazwa_kat%type) AS z_nrprodukt produkty.nr_prod%type; /* Najpierw jest konieczne uzyskanie numeru produktu z tabeli produkty */ SELECT nr_prod INTO z_nrprodukt FROM produkty WHERE nazwa_prod = p_nazwa_produkt; /* Teraz można dodać produkt poprzez podanie numeru produktu */ INSERT INTO produkty_wycofane(nr_prod, kod_dost, nazwa_kat) VALUES(p_Nr_produkt, p_kod_dostawca, p_nazwa_kategoria); COMMIT; END DodajProdukt; END PakiektProdukt; Został utworzony pakiet, który zawiera dwie procedury o tych samych nazwach, lecz różnych parametrach. Teraz w celu dodania produktu wycofanego z kategorii nabiał dostarczanego przez dostawcę o numerze M0345 można zastosować kod: PakietProdukt.DodajProdukt(12457, Nabiał, M0345); END; lub kod: PakietProdukt.DodajProdukt( Śmietana 18%, Nabiał, M0345); END; Innym sposób wywołania procedury zawartej w pakiecie polega na wywołaniu jej z uwzględnieniem nazwy pakietu. A zatem w celu dodania produktu wycofanego z kategorii nabiał dostarczanego przez dostawcę o numerze M0345 można zastosować kod: EXECUTE PakietProdukt.DodajProdukt(12457, Nabiał, M0345); lub też nazwą produktu jako parametrem podprogramu: 11

12 EXECUTE PakietProdukt.DodajProdukt( Śmietana 18%, Nabiał, M0345); Jak z powyższych przykładów wynika: aby wywołać procedurę z pakietu, nazwę podprogramu należy poprzedzić nazwą pakietu, po której należy umieścić kropkę oraz nazwę procedury, która ma zostać wykonana, przeciążenie procedury nastąpiło w efekcie wywołania jej w dwóch oddzielnych sytuacjach, w pierwszym przypadku, został przesłana wartość liczbowa, która określa numer produktu, zaś w drugim został przesłany ciąg znaków określający nazwę produktu, na podstawie którego podprogram użył odpowiedniej procedury zdefiniowanej w ramach podprogramu. Uwaga: Ponieważ pakiety są ładowane w całości do wewnętrznej pamięci systemu Oracle, to własność ta może powodować znaczne przyśpieszenie działania programu, szczególnie w przypadku, gdy pakiet jest często używany. Przeciążanie podprogramów może okazać się bardzo użyteczną techniką, ponieważ ta sama operacja może być wykonana dla argumentów różnych typów. Technika przeciążania podlega jednak pewnym ograniczeniom: Nie można przeciążać dwóch podprogramów, jeżeli ich parametry różnią się tylko nazwą lub trybem, jak w poniższym przykładzie: PROCEDURE PrzeciazMnie ( p_parametr IN NUMBER); PROCEDURE PrzeciazMnie ( p_parametr OUT NUMBER); Nie można przeciążać dwóch funkcji tylko na podstawie różnicy typów zwracanych przez nie wartości, np. poniższe dwie funkcje nie mogą być przeciążone: FUNCTION PrzeciazMnie RETURN DATE; FUNCTION PrzeciazMnie RETURN NUMBER; Parametry funkcji przeciążanych muszą różnić się rodzinami typów nie można stosować techniki przeciążania, jeśli typy parametrów należą do tej samej rodziny typów. Przykładowo, CHAR oraz VARCHAR2 należą do tej samej rodziny, zatem nie można przeciążyć poniższych procedur: PROCEDURE PrzeciazMnie ( p_parametr IN CHAR); PROCEDURE PrzeciazMnie ( p_parametr IN VARCHAR2); Kompilator PL/SQL w rzeczywistości pozwala na utworzenie pakietu, który zawiera podprogramy naruszające powyżej wymienione ograniczenia. Jednak mechanizm wykonywania programu nie będzie mógł zrealizować poszczególnych odwołań i zawsze wygeneruje błąd: PLS-307: too many declarations of subprogram match this call (temu wywołaniu odpowiada za dużo deklaracji podprogramu ) 12

13 Tworzenie instancji i inicjalizacja pakietu Podczas pierwszego wywołania podprogramu albo dowolnego odwołania do zmiennej lub typu wchodzącego w skład pakietu zachodzi proces nazwany instancjonowaniem lub tworzenia instancji pakietu. Oznacza to, iż pakiet zostaje wczytany z dysku do pamięci i pozostaje w niej na czas sesji. Następnie zostaje wykonywany skompilowany kod wywoływanego podprogramu. Na tym etapie następuje przydzielenie pamięci wszystkim zmiennym zdefiniowanym w pakiecie. Dla każdej sesji jest przydzielana oddzielna kopia zmiennych pakietowych. W ten sposób dwie sesje wykonujące podprogramy w tym samym pakiecie wykorzystują różne miejsca w pamięci. W wielu przypadkach jest konieczne, aby za pierwszym razem, podczas instancjonowania pakietu, był wykonywany kod inicjalizacji. Można to osiągnąć poprzez dodanie sekcji inicjalizacji w treści pakietu po wszystkich innych obiektach. W tym celu stosuje się polecenie o następującej składni: CREATE OR REPLACE BODY nazwa_pakietu {IS AS} kod_inicjalizacji; END {nazwa_pakietu}; gdzie nazwa_pakietu jest nazwą pakietu, a kod_inicjalizacji jest kodem, który ma być wykonany. W kolejnym przykładzie zmodyfikujemy poprzednio rozważany PakietPracowniczy uzupełniony o sekcję inicjalizacyjną umieścimy w niej instrukcję SQL, która rejestruje nazwę użytkownika oraz znacznik czasu dla momentu, kiedy komponent jest uruchamiany w sesji po raz pierwszy. Do zarejestrowania tych wartości w treści pakietu trzeba zadeklarować dwie zmienne, które nie będą dostępne publicznie (UserNazwa i UserData). Zostaną one oddzielone od procedur i funkcji. Oto treść pakietu z kodem inicjalizacyjnym: CREATE OR REPLACE PACKAGE BODY PakietPracowniczy AS /* Dwie zmienne wykorzystywane przy pierwszym uruchomieniu pakietu podczas tzw. inicjowania pakietu */ UserNazwa UserData VARCHAR2(30); DATE; -- Przydzielenie pracownika do odpowiedniej grupy wynagrodzeń. PROCEDURE DodajPracownika (p_pracownikid p_grupa IN grupy.grupa%type, p_stawkagodz IN grupy.stawka%type) AS INSERT INTO grupy_pracownikow (pracownik_id, grupa, stawka) VALUES(p_PracownikId, p_grupa, p_stawkagodz); END DodajPracownika; -- Usunięcie pracownika z danej grupy wynagrodzeń. PROCEDURE UsunPracownika (p_pracownikid p_grupa IN grupy.grupa%type, p_stawkagodz IN grupy.stawka%type) AS DELETE FROM grupy_pracownikow WHERE pracownik_id = p_pracownikid 13

14 AND grupa = p_grupa; /* Sprawdzenie, czy operacja DELETE powiodła się. Jeśli nie znaleziono wierszy do usunięcia zgłoszenie błędu */ IF SQL%NOTFOUND THEN RAISE w_pracownikniewprowadzony; END IF; END UsunPracownika; FUNCTION WynagrPracownika (p_prac p_premia IN NUMBER, p_liczbagodz IN NUMBER) RETURN NUMBER IS z_stawka zatrudnienie.stawka%type; CURSOR k_stawka IS SELECT stawka INTO z_stawka FROM zatrudnienie WHERE id = p_prac; p_wynagrodzenie:= p_liczbagodz*z_stawka*(1 + p_premia); END WynagrPracownika; SELECT USER, SYSDATE INTO UserNazwa, UserData FROM Dual; END PakietPracowniczy; / Jeśli chodzi o sposób inicjalizacji pakietu, to należy zauważyć, że kod, który ma być uruchomiony przy pierwszym wykonaniu komponentu pakietu: jest deklarowany jako ostatnia część treści pakietu, tj. w dolnej jego części, nie ma oddzielnej instrukcji END dla instrukcji inicjującej pakiet podczas sesji instancjonowania wykorzystuje klauzulę END treści pakietu. sekcja inicjalizacyjna jest wykonywana tylko raz, w czasie tworzenia instancji pakietu. Kiedy komponent pakietu PakietPracowniczy zostanie uruchomiony po raz pierwszy w sesji użytkownika, zapytanie (pogrubione na listingu kodu powyżej) ustawi zmienne UserNazwa i UserData. Można je następnie wykorzystać w funkcjach i procedurach wewnątrz pakietu, chociaż w celu zachowania zwięzłości w tym pakiecie ich nie wykorzystano. Korzyści wynikające z wykorzystywania pakietów Jak się okazuje, istnieje wiele powodów, dla których warto używać pakietów języka PL/SQL. Poniżej zostały wypunktowane najistotniejsze korzyści wynikające z wykorzystywania pakietów języka PL/SQL: organizacja kodu programu w ramach pakietu mamy możliwość zgrupowania odpowiednio ze sobą powiązanych jednostek programowych. Zabieg ten pozwala na tworzenie kodu zorganizowanego w wygodne do stosowania 14

15 struktury. Można powiedzieć, używając odpowiedniej terminologii, iż pakiety pozwalają na wykorzystywanie mechanizmów abstrakcji, enkapsulacji oraz ukrywania informacji. zarządzanie dużą liczbą elementów oprogramowania grupowanie różnego rodzaju jednostek programowych języka PL/SQL w znacznym stopniu ułatwia zarządzanie dużą liczbą jednocześnie wykorzystywanych elementów oprogramowania. Wynika to także z predyspozycji samego człowieka, który w danej chwili czasowej jest w stanie wykorzystywać ograniczoną liczbę jednostek programowych dowolnego języka programowania. wydajność ponieważ w momencie pierwszego uruchomienia programu w pakiecie system Oracle wczytuje do pamięci całą zawartość pakietu, a nie tylko sam wywoływany program, to takie działanie powoduje, iż zwiększa się wydajność w momencie wywoływania innych programów umieszczonych w pakiecie. Wynika to oczywiście ze zmniejszenia liczby operacji wejścia/wyjścia podczas wykorzystania innych elementów programowych umieszczonych w pakiecie. Ponadto jest to następstwem tego, iż nie ma potrzeby korzystania z danych umieszczonych na wolniejszym dysku twardym, bo zostały one już wczytane przez system. Jak z tego wynika, w pakiecie warto przechowywać tylko te komponenty programowe, które są ze sobą powiązane. usprawnienie pracy sesyjnej podczas trwania sesji występuje niekiedy konieczność przechowywania w pamięci pewnych tymczasowych lub stałych wartości. Dzięki wykorzystaniu pakietów tego typu wartości można przechowywać w globalnych lub lokalnych zmiennych. Bez zastosowania pakietów wartości tego typu musiałyby być przechowywane w samej bazie danych, co z kolei miałoby niekorzystny wpływ na wydajność systemu (powyżej cecha wydajność). Problematyczne też byłoby odwoływanie się do pewnej wartości po wycofaniu transakcji. usprawnienie procesu rekompilacji w przypadku dużych systemów składających się z bardzo dużej liczby (liczonej w setkach lub więcej) programów, dużym problemem może stać się proces rekompilacji części składowych programu po dokonaniu pewnych zmian. Dzięki pakietom można uniknąć wielu trudności dzięki temu, ze można rekompilować zawartość ciała pakietu, bez konieczności rekompilacji programów, które wykorzystuje zmodyfikowany program. W przypadku zmiany specyfikacji pakietu trzeba już jednak ponownie skompilować każdy program uwzględniony w pakiecie, ale często tę czynność system Oracle wykonuje automatycznie. możliwość wykorzystania szczególnych cech języka PL/SQL wykorzystując pakiety języka PL/SQL mamy możliwość wykorzystania pewnej interesującej i użytecznej cechy języka PL/SQL, jaką jest możliwość tworzenia wielu jednostek programowych o tej samej nazwie. Pozwala to np. na wywołanie jednego programu, który może obsługiwać dane wejściowe o różnych typach. Technika ta nosi nazwę przeciążania (ang. overloading) i jest niedostępna dla programów, które nie zostały umieszczone w pakiecie. W ten sposób przeciążanie przyczynia się do stworzenia programu, który jest w pewien sposób jakby bardziej uniwersalny. 15

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tworzenie raportów XML Publisher przy użyciu Data Templates Tworzenie raportów XML Publisher przy użyciu Data Templates Wykorzystanie Szablonów Danych (ang. Data templates) jest to jedna z metod tworzenia raportów w technologii XML Publisher bez użycia narzędzia

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

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

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

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

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

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

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

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

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

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/

Oracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 4 Wyjątki PL/SQL Mechanizmy dotyczące błędów Typy wyjątków Obsługa wyjątków PL/SQL Obsługa błędów predefiniowanych, użytkownika

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

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

Plan wykładu BAZY DANYCH II WYKŁAD 7. Pakiety. Zalety pakietów 2011-01-13 Plan wykładu BAZY DANYCH II WYKŁAD 7 Pakiety: specyfikacja, ciało, Wywoływanie elementów pakietów, Przeciążanie podprogramów z pakietów, Inicjowanie pakietów, Deklaracje uprzedzające, Funkcje pakietowe

Bardziej szczegółowo

Oracle11g: Programowanie w PL/SQL

Oracle11g: Programowanie w PL/SQL Oracle11g: Programowanie w PL/SQL OPIS: Kurs pozwala zrozumieć zalety programowania w języku PL/SQL. Studenci uczą się tworzyć bloki kodu wykonywanego po stronie serwera, który może być współużytkowany

Bardziej szczegółowo

Wstęp do programowania 2

Wstęp do programowania 2 Wstęp do programowania 2 wykład 10 Zadania Agata Półrola Wydział Matematyki UŁ 2005/2006 http://www.math.uni.lodz.pl/~polrola Współbieżność dotychczasowe programy wykonywały akcje sekwencyjnie Ada 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

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

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

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

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Pakiety i interfejsy. Tomasz Borzyszkowski

Pakiety i interfejsy. Tomasz Borzyszkowski Pakiety i interfejsy Tomasz Borzyszkowski Pakiety podstawy W dotychczasowych przykładach nazwy klas musiały pochodzić z jednej przestrzeni nazw, tj. być niepowtarzalne tak, by nie doprowadzić do kolizji

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

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

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

Ada-95. Dariusz Wawrzyniak

Ada-95. Dariusz Wawrzyniak Część I Wskaźniki Plan Typy wskaźnikowe i obiekty wskazywane 1 Typy wskaźnikowe i obiekty wskazywane 2 3 4 Plan Typy wskaźnikowe i obiekty wskazywane 1 Typy wskaźnikowe i obiekty wskazywane 2 3 4 Wskaźniki

Bardziej szczegółowo

Oracle11g: Wprowadzenie do SQL

Oracle11g: Wprowadzenie do SQL Oracle11g: Wprowadzenie do SQL OPIS: Kurs ten oferuje uczestnikom wprowadzenie do technologii bazy Oracle11g, koncepcji bazy relacyjnej i efektywnego języka programowania o nazwie SQL. Kurs dostarczy twórcom

Bardziej szczegółowo

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli.

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli. SQL W JĘZYKU PL/SQL Strukturalny język zapytań SQL określa sposób manipulowania danymi w bazie danych. Konstrukcje proceduralne języka PL/SQL stają się bardziej użyteczne w połączeniu z mocą przetwarzania

Bardziej szczegółowo

Dziedziczenie. Tomasz Borzyszkowski

Dziedziczenie. Tomasz Borzyszkowski Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.

Bardziej szczegółowo

Przykład 1: Funkcja jest obiektem, przypisanie funkcji o nazwie function() do zmiennej o nazwie funkcja1

Przykład 1: Funkcja jest obiektem, przypisanie funkcji o nazwie function() do zmiennej o nazwie funkcja1 Rachunek Prawdopodobieństwa i Statystyka lab 3. Kaja Gutowska (Kaja.Gutowska@cs.put.poznan.pl) 1. Funkcje: - Funkcje nie powinny korzystać ze zmiennych globalnych. - Funkcje powinny być możliwie krótkie.

Bardziej szczegółowo

Oracle10g: Programowanie w PL/SQL

Oracle10g: Programowanie w PL/SQL Oracle10g: Programowanie w PL/SQL OPIS: Szkolenie dotyczy użytkowników Oracle8i, Oracle9i i Oracle10g. Ten kurs pozwala zrozumieć zalety tego potężnego narzędzia programowania do PL/SQL. Studenci uczą

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

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

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

Delphi Laboratorium 3

Delphi Laboratorium 3 Delphi Laboratorium 3 1. Procedury i funkcje Funkcja jest to wydzielony blok kodu, który wykonuje określoną czynność i zwraca wynik. Procedura jest to wydzielony blok kodu, który wykonuje określoną czynność,

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 7 Dynamiczny SQL i PL/SQL Pierwotny dynamiczny SQL Pierwotny dynamiczny DDL Pierwotny dynamiczny DML i SELECT Pakiet DBMS_SQL Transakcje

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

Materiały do laboratorium MS ACCESS BASIC

Materiały do laboratorium MS ACCESS BASIC Materiały do laboratorium MS ACCESS BASIC Opracowała: Katarzyna Harężlak Access Basic jest językiem programowania wykorzystywanym w celu powiązania obiektów aplikacji w jeden spójny system. PROCEDURY I

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/

Oracle PL/SQL. Paweł Rajba. pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 6 Wprowadzenie Definiowanie wyzwalaczy DML Metadane wyzwalaczy Inne zagadnienia, tabele mutujące Wyzwalacze INSTEAD OF Wyzwalacze

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

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

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

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

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

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Klasy w C++

Zaawansowane programowanie w języku C++ Klasy w C++ Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

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

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

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

Wstęp do programowania

Wstęp do programowania wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych

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

Przeciążanie operatorów

Przeciążanie operatorów Instrukcja laboratoryjna nr 4 Programowanie w języku C 2 (C++ poziom zaawansowany) Przeciążanie operatorów dr inż. Wilk-Jakubowski Jacek mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz Wprowadzenie Oprócz

Bardziej szczegółowo

SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE

SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE Instrukcje SQL dzielimy na następujące kategorie: 1) Instrukcje języka manipulowania danymi (DML) SELECT, INSERT, UPDATE, DELETE, SET TRANSACTION, EXPLAIN PLAN 2) Instrukcje języka definicji danych DDL

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

Cele. Definiowanie wyzwalaczy

Cele. Definiowanie wyzwalaczy WYZWALACZE Definiowanie wyzwalaczy Cele Wyjaśnić cel istnienia wyzwalaczy Przedyskutować zalety wyzwalaczy Wymienić i opisać cztery typy wyzwalaczy wspieranych przez Adaptive Server Anywhere Opisać dwa

Bardziej szczegółowo

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

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu. Plan wykładu Spis treści 1 Dynamiczny SQL 1 2 Wyzwalacze 2 3 Podsumowanie 9 4 Źródła 9 1 Dynamiczny SQL Dynamiczny SQL Dynamiczny SQL - technika programowania umożliwiająca generowanie instrukcji SQL dynamicznie

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

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

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C #import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:

Bardziej szczegółowo

Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL 2012-01-20

Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL 2012-01-20 Plan wykładu BAZY DANYCH II WYKŁAD 9 Dynamiczny SQL, NDS, EXECUTE IMMEDIATE, Pakiet DBMS_SQL, Obiekty w PL/SQL, Tworzenie, wywoływanie, dziedziczenie, etc. dr inż. Agnieszka Bołtuć Dynamiczny SQL Pozwala

Bardziej szczegółowo

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza 4 Budowa prostych formularzy, stany sesji, tworzenie przycisków Plan Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza 2 Formularz i jego typy Tworzenie formularza

Bardziej szczegółowo

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium: Zakres laboratorium: definiowanie struktur terminologia obiektowa definiowanie klas funkcje składowe klas programy złożone z wielu plików zadania laboratoryjne Laboratorium nr 12 Temat: Struktury, klasy.

Bardziej szczegółowo

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

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

Ćwiczenie 13 PL/SQL. Język PL/SQL procedury, funkcje, pakiety, wyzwalacze Ćwiczenie 13 PL/SQL Język PL/SQL procedury, funkcje, pakiety, wyzwalacze Ćwiczenie 13 PL/SQL Niniejsze ćwiczenie zaprezentuje składowane w bazie danych programy PL/SQL: procedury, funkcje, pakiety oraz

Bardziej szczegółowo

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę. Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

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

Modelowanie i Programowanie Obiektowe

Modelowanie i Programowanie Obiektowe Modelowanie i Programowanie Obiektowe Wykład I: Wstęp 20 październik 2012 Programowanie obiektowe Metodyka wytwarzania oprogramowania Metodyka Metodyka ustandaryzowane dla wybranego obszaru podejście do

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

2010-11-22 PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

2010-11-22 PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH PLAN WYKŁADU Bezpieczeństwo w języku SQL Użytkownicy Uprawnienia Role BAZY DANYCH Wykład 8 dr inż. Agnieszka Bołtuć OGRANICZENIA DOSTĘPU DO DANYCH Ograniczenie danych z tabeli dla określonego użytkownika

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście. Rodzaje triggerów Triggery DML na tabelach INSERT, UPDATE, DELETE Triggery na widokach INSTEAD OF Triggery DDL CREATE, ALTER, DROP Triggery na bazie danych SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.

Bardziej szczegółowo