1. ELEMENTY JĘZYKA PL/SQL

Podobne dokumenty
Język PL/SQL Wprowadzenie

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

Język PL/SQL Wprowadzenie

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

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

Język PL/SQL. Rozdział 1. Wprowadzenie do języka PL/SQL

Bloki anonimowe w PL/SQL

PODSTAWY BAZ DANYCH 13. PL/SQL

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

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

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

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

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

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

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

Bazy danych 2 Laboratorium 2

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

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

Bloki anonimowe w PL/SQL

Deklarowanie kursora

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

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

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

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

15. Funkcje i procedury składowane PL/SQL

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

Ćwiczenie 11 PL/SQL. Wprowadzenie do języka PL/SQL

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

Procedury i funkcje składowane

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

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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

PL/SQL. Zaawansowane tematy PL/SQL

Oracle PL/SQL. Paweł Rajba.

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

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

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

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

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

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

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

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

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

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

Celem ćwiczenia jest wprowadzeniem do programowaniu w języku PL/SQL. Język PL/SQL umoŝliwia tworzenie programów, przetwarzających dane w bazie danych.

Składowane procedury i funkcje

Zaawansowane bazy danych i hurtownie danych semestr I

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

BAZY DANYCH W APLIKACJACH SIECIOWYCH

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

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Pakiety podprogramów Dynamiczny SQL

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

1. Wyzwalacze BD (ang. triggers)

Oracle PL/SQL. Paweł Rajba.

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

Struktury sterowania PL/SQL

Wstęp do programowania 2

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

Podstawy Programowania C++

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

Algorytmika i Programowanie VBA 1 - podstawy

Zaawansowane bazy danych i hurtownie danych semestr I

Oracle PL/SQL. Paweł Rajba.

1 Podstawy c++ w pigułce.

Systemy baz danych 2 laboratorium Projekt zaliczeniowy

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

Typy danych w języku PL/SQL

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

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.

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

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

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

Wyzwalacze (triggery) Przykład

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

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

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Technologie baz danych WYKŁAD 7: Wyjątki

Tabele wykorzystywane w przykładach

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

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Podprogramy. Rozdział 11 Procedury i funkcje składowane

LibreOffice Calc VBA

Procedury Funkcje Pakiety. Tworzenie procedury

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

Elementy języka VHDL. obiekty typy danych atrybuty pakiety i biblioteki instrukcje współbieżne instrukcje sekwencyjne. PUE-w3 1

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Oracle PL/SQL. Paweł Rajba.

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

Aspekty aktywne baz danych

Ćwiczenia 2 IBM DB2 Data Studio

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

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)

Bazy danych 7. SQL podstawy

Oracle PL/SQL. Paweł Rajba.

Transkrypt:

1. ELEMENTY JĘZYKA PL/SQL Aplikacje korzystające z PL/SQL będącego proceduralnym rozszerzeniem SQL mogą wykonywać procedury i funkcje języka PL/SQL składowane w bazie danych oraz wysyłać własne programy do wykonania przez serwer. PL/SQL jest językiem o strukturze blokowej. Za pomocą języka PL/SQL tworzy się: - anonimowe bloki programu - procedury i funkcje składowane - pakiety - wyzwalacze bazy danych (ang. triggers) Każdy blok anonimowy może składać się z trzech części: deklaracyjnej, wykonywalnej i obsługującej wyjątki: [... deklaracje ]... rozkazy [EXCEPTIONS... wyjątki ] Możliwe jest zagnieżdżanie bloków. PL/SQL umożliwia wykorzystanie: - zmiennych i stałych - struktur kontroli, w tym instrukcji warunkowych, pętli, etykiet, instrukcji skoku, instrukcji wyboru warunkowego - kursorów - wyjątków i mechanizmu obsługi błędów. Jedynymi instrukcjami SQL, które mogą pojawić się w bloku PL/SQL są: SELECT, INSERT, UPDATE, COMMIT, ROLLBACK, SAVEPOINT. Ponadto można wykorzystywać wszystkie funkcje, operatory i pseudokolumny dostępne w SQL. a) Zmienne i stałe Zmienne i stałe muszą być zadeklarowane w sekcji deklaracyjnej bloku. nazwa_zmiennej typ(długość) [ DEFAULT wartość domyślna ] [ NOT NULL ];

licznik NUMBER(4); znak CHAR(1) DEFAULT 'A'; flaga BOOLEAN DEFAULT TRUE; data_pocz DATE DEFAULT SYSDATE NOT NULL; Nadawanie wartości zmiennym Nadanie wartości poprzez przypisanie UWAGA!!! Zmienna, która została zadeklarowana lecz nie została zainicjalizowana, posiada wartość NULL. Użycie takiej zmiennej może spowodować nieprawidłowe wyniki. v_licznik NUMBER := 10; v_nazwa VARCHAR2(30) := 'Politechnika Opolska'; v_flaga BOOLEAN := FALSE;... v_podatek NUMBER(10,2) := v_suma * v_stawka_pod; v_zysk NUMBER(10,2) := f_oblicz_zysk('01-01-1999', v_today); Nadanie wartości przez wczytanie danych z bazy danych do zmiennej Nadanie wartości przez przekazanie zmiennej jako parametru typu IN OUT lub OUT do procedury lub funkcji SELECT nazwisko, etat INTO v_nazwisko, v_etat FROM prac WHERE placa_pod = ( SELECT MAX(placa_pod) FROM prac ); v_pensja NUMBER(7,2); Stałe Stałe deklarujemy z użyciem słowa kluczowego CONSTANT. Stała musi zostać zainicjalizowana podczas deklaracji. Po utworzeniu stałej jakiekolwiek modyfikacje jej wartości są niedozwolone. v_godziny_pracy CONSTANT NUMBER := 42; v_pp CONSTANT VARCHAR2(30) := 'Politechnika Opolska'; b) Typy danych Typy danych dostępne w PL/SQL nie odpowiadają dokładnie analogicznym typom dostępnym w SQL. Typy BINARY_INTEGER i PLS_INTEGER: -231 231. Ich podtypami są typy: POSITIVE, POSITIVEN, NATURAL, NATURALN i SIGNTYPE (-1, 0, 1). Typ NUMBER: 10-130 10125. Jego podtypami są typy: DECIMAL, INTEGER, FLOAT, REAL, NUMERIC. Typy CHAR, VARCHAR2, RAW, LONG: 32767 bajtów

Typ BOOLEAN: TRUE, FALSE, NULL Atrybuty %TYPE, %ROWTYPE umożliwiają określanie typów na podstawie wcześniej utworzonych zmiennych, kolumn tabeli lub wierszy tabeli. Atrybut %TYPE zawiera typ innej zmiennej lub typ atrybutu w bazie danych. Atrybut %ROWTYPE zawiera typ rekordowy reprezentujący strukturę pojedynczej krotki z danej relacji. Atrybuty w krotce i odpowiadające im pola w rekordzie mają te same nazwy i typy. v_nazwisko PRAC.NAZWISKO%TYPE; v_nazwa_zespolu ZESP.NAZWA%TYPE; v_pracownik PRAC%ROWTYPE; v_zespol ZESP%ROWTYPE; Typ rekordowy Zmienną typu rekordowego można utworzyć również korzystając z zdefiniowanego wcześniej własnego typu rekordowego: TYPE pracownik_rek IS RECORD ( nazwisko prac.nazwisko %TYPE, zespol zesp.nazwa%type pensja NUMBER(^,2) NOT NULL := 900); Deklaracja zmiennej: nowy_prac pracownik_rek Typ tablicowy Zmienne typu tablicowego mają strukturę dwukolumnowej matrycy. Pierwsza kolumna jest wykorzystywana do indeksowania wierszy tablicy i musi być typu binary_integer. Druga kolumna może być jednego z typów prostych char, number, date... Typ tablicowy deklarujemy następująco: TYPE nazwa_typu IS TABLE OF nazwa_kolumny typ_kolumny [NOT NULL] INDEX BY BINARY_INTEGER; TYPE tab_liczbowa IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; tablica tab_liczbowa; - zmienna typu tablicowego n binary_integer :=0; - wykorzystana do adresowania komórek tablicy wartosc number(2); - wartość komórki tablicy

Podtypy Każdy typ danych definiuje zbiór poprawnych wartości i zbiór operatorów, które mogą być zastosowane do zmiennej danego typu. Podtyp definiuje ten sam zbiór operatorów co jego typ nadrzędny, lecz zawęża zbiór poprawnych wartości. SUBTYPE nazwa IS typ bazowy [ (ograniczenie) ] [ NOT NULL ]; np: SUBTYPE DataUr DATE NOT NULL; SUBTYPE Pieniadze NUMBER(9,2);... v_moje_urodziny DataUr; v_moja_pensja Pieniadze; Konwersje typów mogą być realizowane niejawnie lub jawnie za pomocą funkcji konwertujących to_char() lub to_date(). 2. INSTRUKCJE STERUJĄCE Instrukcja warunkowa Instrukcja warunkowa IF-THEN-ELSE występuje w trzech wariantach: IF warunek THEN sekwencja poleceń; ELSE sekwencja poleceń; END IF; IF warunek1 THEN sekwencja poleceń; ELSIF warunek2 THEN sekwencja poleceń; ELSE sekwencja poleceń; END IF; IF warunek THEN sekwencja poleceń; END IF; Pętla LOOP Prosta pętla wykonuje się w nieskończoność. Wyjście z pętli jest możliwe tylko jako efekt wykonania polecenia EXIT lub EXIT WHEN. W każdym przebiegu pętli wykonuje się sekwencja poleceń. Po ich wykonaniu kontrola powraca do początku pętli. LOOP sekwencja poleceń; IF warunek THEN EXIT; END IF; END LOOP; LOOP sekwencja poleceń; EXIT WHEN warunek; END LOOP; Przykład prostej pętli: v_suma NUMBER := 0; v_i INTEGER := 0; v_koniec CONSTANT INTEGER := &koniec; LOOP v_suma := v_suma + v_i; EXIT WHEN (v_i = v_koniec); v_i := v_i + 1; END LOOP; DBMS_OUTPUT.PUT_LINE('Suma liczb od 0 do ' v_koniec); DBMS_OUTPUT.PUT_LINE(v_suma);

Pętla WHILE Przed każdą iteracją sprawdzany jest warunek. Pętla jest wykonywano tak długo, jak długo warunek ma wartość TRUE. Jeżeli wartość warunku wynosi FALSE lub UNKNOWN to kontrola przechodzi do pierwszego polecenia po pętli. Jeżeli warunek na samym początku nie był spełniony, to pętla nie wykona się ani razu. UWAGA!!! W sekwencji operacji musi znaleźć się polecenie, które zmieni warunek, w przeciwnym przypadku pętla jest nieskończona. WHILE warunek LOOP sekwencja poleceń; END LOOP; Przykład pętli WHILE: a NUMBER := &pierwsza_liczba; b NUMBER := &druga_liczba; WHILE (a!= b) LOOP IF (a > b) THEN a := a - b; ELSE b := b - a; END IF; END LOOP; DBMS_OUTPUT.PUT_LINE(' NWD = ' a); Pętla FOR Pętla FOR wykonuje się określoną liczbę razy. Liczba iteracji jest określona przez zakres podany między słowami kluczowymi FOR i LOOP. Zakres musi być typu numerycznego, w przedziale 231 231 Słowo kluczowe REVERSE odwraca kierunek iteracji Wewnątrz pętli nie wolno nadawać wartości zmiennej iterującej Jeśli dolna granica jest wyższa niż górna granica to pętla nie wykona się ani razu Obie granice zakresu iteracji nie muszą być statyczne Zmienna iterująca nie musi być wcześniej deklarowana ani inicjalizowana Do wcześniejszego wyjścia z pętli można użyć polecenia EXIT FOR licznik IN [ REVERSE ] dolna_gr.. górna_gr LOOP sekwencja poleceń; END LOOP;

Polecenia sterujące GOTO i NULL Polecenie GOTO bezwarunkowo przekazuje kontrolę wykonywania programu do miejsca wskazywanego przez etykietę związaną z poleceniem. Polecenie NULL nie wykonuje żadnej akcji. Etykieta musi poprzedzać polecenie wykonywalne GOTO nie może przeskakiwać do warunkowych części poleceń IF-THEN-ELSE, CASE, do polecenia LOOP i do bloku podrzędnego GOTO nie może wyskakiwać z podprogramu oraz procedury obsługi błędu GOTO etykieta;... <<etykieta>> NULL; Przykład polecenia GOTO: v_tek VARCHAR2(20); <<poczatek>> v_tek := 'JEDEN '; GOTO dwa; <<trzy>> v_tek := v_tek 'TRZY '; GOTO drukuj; <<drukuj>> DBMS_OUTPUT.PUT_LINE(v_tek); GOTO koniec; <<dwa>> v_tek := v_tek 'DWA '; GOTO trzy; <<koniec>> NULL; UWAGA: Przed wykonaniem ćwiczenia ustaw zmienną środowiska: SET SERVEROUTPUT ON Zadania 1. Wypisać wszystkie liczby pierwsze dwucyfrowe, które maja obie cyfry nieparzyste. 2. Napisać program sprawdzający ile par identycznych elementów znajduje się w danej tabeli. 3. Napisać dowolny program (unikalny) z wykorzystaniem typu rekordowego.