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



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

Język PL/SQL Pakiety podprogramów

Pakiety podprogramów Dynamiczny SQL

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

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

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

Procedury i funkcje składowane

Oracle PL/SQL. Paweł Rajba.

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

15. Funkcje i procedury składowane PL/SQL

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

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

Oracle11g: Programowanie w PL/SQL

Zaawansowane bazy danych i hurtownie danych semestr I

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

Bloki anonimowe w PL/SQL

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

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

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

Oracle10g: Programowanie w 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

PODSTAWY BAZ DANYCH 13. PL/SQL

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

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Oracle PL/SQL. Paweł Rajba.

Podprogramy. Rozdział 11 Procedury i funkcje składowane

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

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

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

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

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

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

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

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

PL/SQL. Zaawansowane tematy PL/SQL

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

Składowane procedury i funkcje

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

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

Systemy baz danych 2 laboratorium Projekt zaliczeniowy

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

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

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

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

Oracle PL/SQL. Paweł Rajba.

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

Oracle11g: Wprowadzenie do SQL

Organizacja zajęć BAZY DANYCH II WYKŁAD 1. Plan wykładu. SZBD Oracle

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

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

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

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

Oracle PL/SQL. Paweł Rajba.

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

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

Systemy GIS Tworzenie zapytań w bazach danych

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

Microsoft SQL Server Podstawy T-SQL

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Procedury Funkcje Pakiety. Tworzenie procedury

SQL 4 Structured Query Lenguage

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

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

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

Bloki anonimowe w PL/SQL

Oracle PL/SQL. Paweł Rajba.

Obiektowość BD Powtórka Czas odpowiedzi. Bazy Danych i Systemy informacyjne Wykład 14. Piotr Syga

Wykład 5. SQL praca z tabelami 2

SYSTEM INFORMATYCZNY KS-SEW

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

ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW

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

Plan wykładu BAZY DANYCH II WYKŁAD 6. Co to są wyjątki? Co to są wyjątki?

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

1. Wyzwalacze BD (ang. triggers)

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

Ada-95. Dariusz Wawrzyniak

Hurtownia Świętego Mikołaja projekt bazy danych

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

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

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

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

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

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.

Technologie baz danych WYKŁAD 7: Wyjątki

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

1. ELEMENTY JĘZYKA PL/SQL

PHP: bazy danych, SQL, AJAX i JSON

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

Wykład 5: PHP: praca z bazą danych MySQL

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

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

Struktura bazy danych

Internetowe bazy danych

Transkrypt:

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 w SQL, Pakiety wbudowane, dr inż. Agnieszka Bołtuć Pakiety Zalety pakietów Pozwala na przechowywanie powiązanych ze sobą obiektów w jednym miejscu, Zazwyczaj posiada dwie odrębne części: specyfikację i ciało, które są oddzielnie przechowywane w słowniku danych, Nie mogą być lokalne, a muszą być składowane w bazie danych, W pakiecie mogą znajdować się te same elementy co w sekcji deklaracji w bloku: procedury, funkcje, kursory, typy i zmienne oraz wyjątki Enkapsulacja powiązanych obiektów, Grupowanie logicznej funkcjonalności, Łatwe projektowanie aplikacji: kodowanie i kompilacja oddzielnie specyfikacji i ciała, Ukrywanie informacji: tylko deklaracje w specyfikacji są jawne i dostępne dla aplikacji, prywatne deklaracje w ciele pakietu są ukryte, kod jest ukryty w ciele pakietu, 1

Zalety pakietów Pakiety Zwiększenie wydajności, w związku z jednokrotnym ładowaniem do pamięci i dostępnością tej kopii dla wszystkich użytkowników, Dodatkowa funkcjonalność związana z faktem, że pakiety udostępniają zmienne globalne, Umożliwiają przeładowanie procedur i funkcji. Specyfikacja pakietu Ciało pakietu Deklaracja zmiennych Deklaracja procedury lub funkcji itd. Deklaracja zmiennych Definicja procedury lub funkcji itd. publiczne prywatne Specyfikacja pakietu Zwana tez nagłówkiem pakietu, Jest to interfejs do aplikacji, Zawiera informacje o zawartości pakietu, ale bez kodu podprogramów, Może zawierać deklarację publicznych typów, zmiennych, stałych, wyjątków, kursorów, W specyfikacji pakietu obowiązują te same zasady co w sekcji deklaracji bloku anonimowego, Specyfikacja pakietu CREATE [OR REPLACE] PACKAGE nazwa IS AS deklaracja publicznych typów i zmiennych specyfikacja podprogramów END [nazwa]; PROCEDURE nazwa_p (p_1 NUMBER); FUNCTION nazwa_f (p_2 NUMBER) RETURN NUMBER; Można inicjalizować zmienne, inaczej dostają one wartość NULL, Wszystkie konstrukcje zdeklarowane w specyfikacji pakietu są publicznie dostępne dla wszystkich użytkowników, którzy mają prawo do pakietu, 2

Szczegóły deklaracji procedur i funkcji Kolejność deklaracji w pakiecie jest dowolna, ale elementy które są używane w kodzie musza być przed nim zdeklarowane, Nie koniecznie pakiet musi zawierać deklaracje wszystkich rodzajów elementów, Deklaracja w części specyfikacyjnej to tzw. deklaracja uprzedzająca jest to opis programu, bez kodu. Przykład specyfikacji pakietu CREATE OR REPLACE PACKAGE socjalny IS pomoc NUMBER :=1; PROCEDURE inc (p_id employees.employee_id%type); PROCEDURE del (p_id employees.employee_id%type); Ciało pakietu Ciało pakietu Odrębny obiekt słownika danych, Zawiera kody deklaracji uprzedzających z nagłówka pakietu, Mogą zawierać dodatkowe deklaracje dostępne w ciele, ale niewidoczne w specyfikacji: typy, zmienne, kursory, wyjątki, Zdeklarowane elementy są widoczne tylko w danym ciele pakietu, Ciało pakietu jest opcjonalne, jeśli w nagłówku pakietu nie mamy deklaracji procedur i funkcji to ciało nie jest potrzebne, Stworzenie samego nagłówka pakietu przydaje się przy deklaracji typów i zmiennych globalnych, Każda deklaracja z nagłówka musi mieć odzwierciedlenie w ciele, specyfikacja procedur i funkcji w obu częściach pakietu musi być taka sama jeśli chodzi o nazwę, nazwy parametrów i ich tryby, 3

Tworzenie ciała pakietu Przykład ciała pakietu CREATE [OR REPLACE] PACKAGE BODYnazwa IS AS deklaracja prywatnych typów i zmiennych ciała podprogramów END [nazwa]; CREATE OR REPLACE PACKAGE BODY socjalny IS PROCEDURE inc (p_id employees.employee_id%type) IS v_sal employees.salary%type; SELECT salary INTO v_sal FROM employees WHERE employee_id=p_id; v_sal:=v_sal*1.2; UPDATE employees SET salary=v_sal WHERE employee_id=p_id; END inc; Przykład ciała pakietu PROCEDURE del (p_id employees.employee_id%type) IS v_sal employees.salary%type; SELECT salary INTO v_sal FROM employees WHERE employee_id=p_id; IF salary<200 THEN DELETE FROM employees WHERE employee_id=p_id; END IF; END inc; Tworzenie pakietów SQL Developer END socjalny; Okno programu SQL Developer 4

Tworzenie ciał pakietów SQL Developer Wywoływanie pakietów socjalny.inc(100); EXECUTE socjalny.inc(200); EXECUTE nazwa.socjalny.inc(300); Okno programu SQL Developer Wywoływanie pakietów Oracle SQL Developer Pakiety bez ciała definiowanie zmiennych i stałych globalnych CREATE OR REPLACE PACKAGE wart IS c_pi CONSTANT NUMBER :=3.14159; c_e CONSTANT NUMBER :=2.7182818; DBMS_OUTPUT.PUT_LINE( Pole koła równa się wart.c_pi*r*r); Okno programu SQL Developer 5

Podgląd pakietów Wskazówki do pisania pakietów Specyfikacja pakietu SELECT text FROM user_source WHERE name= nazwa AND type= PACKAGE ; Ciało pakietu SELECT text FROM user_source WHERE name= nazwa AND type= PACKAGE BODY ; Twórz pakiety do jak najbardziej ogólnego użytku, Umieszczaj w specyfikacji te elementy, które mogą być publiczne, Te które mają być wykorzystane lokalnie definiuj w ciele pakietu, Jeśli chcesz utworzyć pakiet bez funkcji i procedur stwórz tylko jego specyfikację. Przeciążanie podprogramów z pakietów W pakiecie mogą znajdować się funkcje lub procedury o takiej samej nazwie, ale wersjach z różnymi parametrami, Pozwala to na stosowanie tych samych operacji do różnych typów obiektów, Parametry muszą się różnić w liczbie, kolejności lub typie, Ograniczenia przeciążania Nie można utworzyć dwóch podprogramów jeśli parametry różnią się tylko nazwą lub trybem: PROCEDURE A (p_1 IN NUMBER); PROCEDURE A (p_1 OUT NUMBER); Nie można utworzyć dwóch funkcji jeśli różnią się tylko typem zwracanej wartości, FUNCTION B RETURN NUMBER; FUNCTION B RETURN DATE; 6

Ograniczenia przeciążania Przykład przeciążania Parametry podprogramów muszą należeć do różnych rodzin typów: PROCEDURE C (p_1 IN CHAR); PROCEDURE C (p_1 IN VARCHAR2); W Oracle 10g można przeciążać podprogramy jeśli ich parametry różnią się tylko liczbowym typem danych, np. BINARY_FLOAT i BINARY_DOUBLE. CREATE OR REPLACE PACKAGE prze IS PROCEDURE dod (p_1 NUMBER, p_2 departments.department_name%type := abc ); PROCEDURE dod (p_2 departments.department_name%type := abc ); Przykład przeciążania Inicjowanie pakietów CREATE OR REPLACE PACKAGE BODY prze IS PROCEDURE dod (p_1 NUMBER, p_2 departments.departmen_name%type := abc ) IS INSERT INTO departments (department_id, department_name) VALUES (p_1, p_2); PROCEDURE dod (p_2 departments.departmen_name%type := abc ) IS INSERT INTO departments (department_id, department_name) VALUES (departments_seq.nextval, p_2); Przy pierwszym wywołaniu programu z pakietu lub użyciu jego zmiennej, typu pakiet jest inicjowany, System wczytuje pakiet z dysku do pamięci i uruchamia kod wywołanego elementu, Pamięć jest przydzielana dla wszystkich zmiennych pakietu, Za inicjalizację odpowiada kod tzw. sekcji inicjowania, znajdującej się na samym końcu ciała pakietu. 7

Inicjowanie pakietów CREATE OR REPLACE PACKAGE BODY nazwa IS kod_inicjujący; Inicjowanie pakietów - przykład CREATE OR REPLACE PACKAGE zm IS v_pom NUMBER; CREATE OR REPLACE PACKAGE BODY zm IS SELECT salary INTO v_pom FROM employees WHERE employee_id=100; Deklaracje uprzedzające Nie można używać identyfikatorów przed ich deklaracją, musi być zachowana kolejność, Można temu zapobiec stosując deklaracje uprzedzające, Technika używana także w specyfikacji pakietu, Deklaracje uprzedzające - przykład CREATE OR REPLACE PACKAGE BODY dek IS PROCEDURE A () IS B(); PROCEDURE B () IS 8

Deklaracje uprzedzające - przykład Funkcje pakietowe w SQL CREATE OR REPLACE PACKAGE BODY dek IS PROCEDURE B(); PROCEDURE A () IS B(); Funkcje pakietowe mogą być wywoływane w zapytaniach SQL, SELECT salary, nazwa.funkcja(argument) FROM employees WHERE employee_id=10; PROCEDURE B () IS Funkcje pakietowe w SQL RESTRICT_REFERENCES Musze jednak spełniać określone ograniczenia: W instrukcji SELECT nie może modyfikować żadnych tabel bazy, W instrukcji DML nie może kierować zapytań do tabel związanych z danym poleceniem ani modyfikować ich, W zapytaniu lub poleceniu DML nie może zawierać żadnych instrukcji do kontroli transakcji, sesji ani systemu, Dyrektywa służąca do sprawdzania poziomów ograniczeń funkcji, Wykrywa niezgodności z ograniczeniami już w trakcie kompilacji i zgłasza błędy, Określane są tzw. poziomy czystości: WNDS funkcja nie modyfikuje żadnych tabel bazy danych (używając DML), RNDS funkcja nie wczytuje żadnych tabel bazy (używając SELECT), WNPS funkcja nie modyfikuje żadnych zmiennych pakietu, RNPS funkcja nie sprawdza wartości żadnych zmiennych pakietu, 9

RESTRICT_REFERENCES Pakiety wbudowane PRAGMA RESTRICT_REFERENCES (nazwa_podprogramu_lub_pakietu, [WNDS][, WNPS][, RNDS][, RNPS] [TRUST]); Umieszczamy ją w specyfikacji pakietu wraz z deklaracją funkcji lub procedury, TRUST oznacza że ograniczenia wymienione w dyrektywie nie będą wymuszane. Pakiety wbudowane to pakiety udostępniane przez Oracle mające na celu: Zwiększenie funkcjonalności bazy danych i rozwiązywania złożonych problemów, Pozwalają na dostęp do niektórych własności SQL które są normalnie dla PL/SQL niedostępne, Najczęściej są tworzone za pomocą skryptu catproc.sql. Przegląd pakietów wbudowanych DBMS_ALERT - zapewnia synchroniczny, transakcyjny mechanizm powiadamiania o wystąpieniu określonego zdarzenia w bazie danych pomiędzy sesjami (przed Oracle 8i), DBMS_AQ - pakiet zawiera zbiór programów pozwalających tworzyć, zarządzać i usuwać kolejki i tabele kolejek w Oracle (przed Oracle 8i), DBMS_DDL -zawiera programy pozwalające na rekompilację kodu procedur magazynowanych, analizę i wyliczanie statystyk dla obiektów bazy danych oraz modyfikację wzajemnych zależności obiektów w systemie Oracle (przed Oracle 8i), Przegląd pakietów wbudowanych DBMS_DESCRIBE udostępnia informacje o parametrach procedur z bazy danych, DBMS_DIMENSION używany głównie do obsługi hurtowni danych i umożliwia wyświetlanie informacji o wymiarach, DBMS_CRYPTO obsługuje zaawansowane szyfrowanie, DBMS_DATAPUMP ułatwia przenoszenie danych i metadanych między bazami danych niezależnie od systemu czy sprzętu, 10

Przegląd pakietów wbudowanych Przegląd pakietów wbudowanych DBMS_HS umożliwia komunikacje z bazami danych innymi niż Oracle, DBMS_JAVA pozwala na dostęp do mechanizmów języka Java w języku PL/SQL, DBMS_LOB obsługa typów LOB w PL/SQL, DBMS_OUTPUT pozwala na debugowanie i buforowanie danych tekstowych, DBMS_RANDOM generator liczb losowych, DBMS_REPAIR przeznaczony dla administratorów, służy do wykrywania uszkodzonych tabel i bloków indeksów, pomaga w ich naprawie, DBMS_SCHEDULER służy do tworzenia, konserwacji, planowania i klasyfikowania potrzebnych zadań, DBMS_STANDARD i STANDARD zawierają podstawowe funkcje wbudowane przeznaczone dla programistów aplikacji, nie trzeba używać ich z nazwą pakietu, DBMS_TRANSACTION udostępnia instrukcje do kontroli transakcji, Przegląd pakietów wbudowanych DBMS_OUTPUT DBMS_WARNING umożliwia stosowanie w kodzie PL/SQL zaawansowanych funkcji do obsługi ostrzeżeń, UTL_FILE zapisuje dane do plików systemu operacyjnego i odczytuje je, UTL_HTTP służy do dostępu do danych przez internet, UTL_MAIL służy do zarządzania pocztą elektroniczną, Pakiet służący do wysyłania komunikatów z podprogramów składowanych i wyzwalaczy, Przesyła dane tekstowe z dowolnego bloku PL/SQL do bufora w bazie danych, Komunikaty nie są przesyłane aż podprogram lub wyzwalacz nie zakończy działania, Wymaga stosowania SET SERVEROUTPUT ON w celu wyświetlania komunikatów w SQL Developer i SQL*Plus, 11

DBMS_OUTPUT - procedury DBMS_OUTPUT - procedury SET SERVEROUTPUT ON SIZE n ustawia rozmiar bufora na n znaków, minimum to 2000, maksimum nieograniczony, domyślnie 20000, DBMS_OUTPUT.ENABLE umożliwia odwołania do procedur pakietu, pozwala na ustalenie rozmiaru bufora w zakresie 2000-1000000 za pomocą wywołania z parametrem DBMS_OUTPUT.ENABLE (10000); gdy null to wartość domyślna 20000, DBMS_OUTPUT.DISABLE wyłącza możliwość odwołań do procedur pakietu, bez parametrów, DBMS_OUTPUT.PUT wysłanie komunikatu tekstowego do bufora, DBMS_OUTPUT.PUT( witaj ); DBMS_OUTPUT.NEW_LINE wstawia znacznik końca linii w buforze, bez parametrów, DBMS_OUTPUT - procedury DBMS_OUTPUT - procedury DBMS_OUTPUT.PUT_LINE kombinacja PUT i NEW_LINE, parametr typu VARCHAR2, NUMBER, DATE, DBMS_OUTPUT.PUT_LINE( Witaj ); DBMS_OUTPUT.PUT_LINE(x); DBMS_OUTPUT.GET_LINE pobiera linię z bufora do zmiennej w procedurze, DBMS_OUTPUT.GET_LINE (line OUT VARCHAR2, status OUT INTEGER); line pobrana linia, status 0 jeśli powodzenie, DBMS_OUTPUT.GET_LINES pobiera tablicę linii z bufora do zmiennej w procedurze, DBMS_OUTPUT.GET_LINES ( lines OUT CHARARR, numlines IN OUT INTEGER); CHARARR tablica typu VARCHAR2(255), numlines liczba pobieranych linii. 12

UTL_FILE UTL_FILE pakiet umożliwia zapis i odczyt plików tekstowych z kodu PL/SQL wykonywanego przez serwer bazy danych, Wybrane procedury i funkcje: ISOPEN określa czy uchwyt należy do otwartego pliku, FOPEN otwiera plik do odczytu lub zapisu, FCLOSE zamyka otwarty plik, GET_LINE odczytuje tekst z otwartego pliku, FREMOVE usuń plik, musisz mieć uprawnienia, FRENAME zmień nazwę pliku, PUT_LINE wstawia linię tekstu do pliku, FCOPY kopiuje część pliku do nowego pliku, FGETATTR pobiera i wyświetla atrybuty pliku, NEW_LINE znacznik nowej linii wstawiony do otwartego pliku, FFLUSH zapisuje wszystkie zbuforowane dane do pliku, Odczyt i zapis Odczyt i zapis Tryby otwarcia: r do odczytu, w do zapisu, a do dołączania, UTL_FILE.FOPEN ( location IN VARCHAR2, filename IN VARCHAR2, open_mode IN VARCHAR2) RETURN UTL_FILE.FILE_TYPE; f:=utl_file.fopen(dir,file, a ); UTL_FILE.GET_LINE ( file IN FILE_TYPE, buffer OUT VARCHAR2); UTL_FILE.GET_LINE(f,buf); UTL_FILE.FCLOSE ( file IN OUT FILE_TYPE); UTL_FILE.FCLOSE(f); 13

Odczyt i zapis Odczyt i zapis - przykład UTL_FILE.PUT_LINE ( file IN FILE_TYPE, buffer IN VARCHAR2); UTL_FILE.PUT_LINE(f,buf); PROCEDURE Zapisz (nazwa_pliku VARCHAR2) IS dir VARCHAR2(200); file VARCHAR2(200); v_kom employees.last_name%type; file_h UTL_FILE.FILE_TYPE; dir := 'd:\pom'; file := nazwa_pliku; file_h := UTL_FILE.FOPEN(dir, file, 'w'); SELECT last_name INTO v_kom FROM employees WHERE employee_id=105; UTL_FILE.PUT_LINE(file_h, v_kom); UTL_FILE.PUT_LINE(file_h, sysdate); UTL_FILE.FCLOSE(file_h); END Zapisz; Wyjątki związane z UTL_FILE Wyjątki związane z UTL_FILE INVALID_PATH nie poprawna lokalizacja pliku, INVALID_MODE niepoprawny tryb otwarcia pliku, INVALID_FILEHANDLE niepoprawny uchwyt do pliku, INVALID_OPERATION plik nie może być otwarty lub nie można wykonać na nim żądanej operacji, READ_ERROR błąd systemu operacyjnego podczas odczytu, WRITE_ERROR - błąd systemu operacyjnego podczas zapisu, INTERNAL_ERROR błąd PL/SQL, FILE_OPEN - plik jest już otwarty, INVALID_MAXLINESIZE - zła wartość podana dla FOPEN, INVALID_FILENAME nieprawidłowa nazwa pliku, ACCESS_DENIED odmowa dostępu do lokalizacji pliku, DELETE_FAILED nieudana operacja usuwania pliku, RENAME_FAILED nieudana operacja zmiany nazwy pliku. 14

Wyjątki - przykład WYKORZYSTANA LITERATURA PROCEDURE Zapisz (nazwa_pliku VARCHAR2) IS dir VARCHAR2(200); file VARCHAR2(200); v_kom employees.last_name%type; file_h UTL_FILE.FILE_TYPE; dir := 'd:\pom'; file := nazwa_pliku; file_h := UTL_FILE.FOPEN(dir, file, w'); SELECT last_name INTO v_kom FROM employees WHERE employee_id=105; UTL_FILE.PUT_LINE(file_h, v_kom); UTL_FILE.FCLOSE(file_h); EXCEPTION WHEN UTL_FILE.WRITE_ERROR THEN RAISE_APPLICATION_ERROR(-20002, nie można zapisać do pliku ); END Zapisz; J. Price, Oracle Database 11g i SQL. Programowanie. Helion, 2009. S. Urman, R. Hardman, M. McLaughlin, Oracle Database 10g. Programowanie w języku PL/SQL. Helion, 2008. www.oracle.com 15