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

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

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

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

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

1. ELEMENTY JĘZYKA PL/SQL

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

PODSTAWY BAZ DANYCH 13. PL/SQL

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

Język PL/SQL Wprowadzenie

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

Język PL/SQL Wprowadzenie

Bloki anonimowe w PL/SQL

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

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

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

Bazy danych 2 Laboratorium 2

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

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

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

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

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

Procedury i funkcje składowane

Bloki anonimowe w PL/SQL

Pakiety podprogramów Dynamiczny SQL

PL/SQL. Zaawansowane tematy PL/SQL

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

Zaawansowane bazy danych i hurtownie danych semestr I

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

15. Funkcje i procedury składowane PL/SQL

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

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

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

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

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

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

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.

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

Oracle PL/SQL. Paweł Rajba.

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

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

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

Oracle PL/SQL. Paweł Rajba.

Deklarowanie kursora

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

Składowane procedury i funkcje

Indeksy. Indeks typu B drzewo

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

Tabele wykorzystywane w przykładach

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

Bazy danych - Materiały do laboratoriów VIII

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

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

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

Przestrzenne bazy danych Podstawy języka SQL

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

Wstęp do programowania

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

Język SQL, zajęcia nr 1

Oracle PL/SQL. Paweł Rajba.

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

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

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

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

Zaawansowane bazy danych i hurtownie danych semestr I

Wprowadzenie do języka SQL

Algorytmika i Programowanie VBA 1 - podstawy

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Typy danych w języku PL/SQL

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

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

SQL 4 Structured Query Lenguage

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Oracle11g: Programowanie w PL/SQL

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

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.

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Paweł Rajba

Wyzwalacze (triggery) Przykład

Wykład 5. SQL praca z tabelami 2

Oracle11g: Wprowadzenie do SQL

1 Podstawy c++ w pigułce.

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

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

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

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

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

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

Język SQL. Rozdział 2. Proste zapytania

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

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

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

1. Wyzwalacze BD (ang. triggers)

Oracle PL/SQL. Paweł Rajba.

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

Transkrypt:

1/41 Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska 11 marca 2017

2/41 Plan wykładu 1 2 3 4

3/41 PL/SQL PL/SQL (ang. Procedural Language/Structured Query Language) - język programowania będący proceduralnym rozszerzeniem SQL wprowadzonym przez firmę Oracle (oparty na języku Ada). Umożliwia wykorzystywanie konstrukcji takich jak pętle, instrukcje warunkowe, zmienne oraz tworzenie procedur, funkcji, wyzwalaczy użytkownika wspomagających konkretną realizację bazy danych. Rozwiązanie specyficzne dla SZBD Oracle, jednakże każdy dystrybutor udostępnia swoje rozwiązania (np. PL/pgSQL w PostgreSQL), które są zbliżone do PL/SQL a.

4/41 Cechy PL/SQL język proceduralny nastawiony na przetwarzanie danych, język kompilowany, język obsługujący zmienne, stałe, struktury sterujące, wyjątki, ma strukturę blokową, każda instrukcja wewnątrz bloku PL/SQL jest zakończona średnikiem ;, operator przypisania to :=, może zawierać instrukcje DML i TCL, nie może zawierać instrukcji DDL i DCL (nadawanie uprawnień), pozwala na tworzenie kodu wielokrotnego użytku.

5/41 Bloki PL/SQL Podstawową jednostką, z której składa się program w PL/SQL jest blok, wyróżniamy: bloki anonimowe, bloki nazwane, bloki podrzędne. Każdy blok składa się z maksymalnie czterech części: deklaracyjnej (opcjonalnie), wykonywalnej zaczynającej się słowem begin (obowiązkowo), obsługi wyjatków (opcjonalnie), end; (obowiązkowo).

6/41 Struktura bloku PL/SQL [DECLARE zmienne; kursory; wyjatki_uzytkownika;] BEGIN bloki_podrzedne; instrukcje_sql; instrukcje_pl/sql; [EXCEPTION obsluga_wyjatkow;] END;

7/41 Komentarze W PL/SQL stosuje się dwa rodzaje komentarzy: jednowierszowe - rozpoczynające się od znaków -- wielowierszowe - rozpoczynające się od znaków /*, a kończące */.

Typy danych PL/SQL obsługuje wszystkie typy danych SQL, oraz posiada wiele swoich, dodatkowych typów, które możemy podzielić następująco: typy proste: numeryczne (BINARY INTEGER, PLS INTEGER, BINARY FLOAT, BINARY DOUBLE, NUMBER...), znakowe (CHAR, VARCHAR2, RAW, NCHAR, NVARCHAR2, LONG, LONG RAW, ROWID, UROWID) BOOLEAN daty i czasu (DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE) przedziały czasowe (INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND) typy złożone (RECORD, kolekcje: tablice asocjacyjne, NASTED TABLE, VARRAY), typy referencyjne (REF CURSOR, REF typ obiektowy), duże obiekty (BFILE, BLOB, CLOB, NCLOB), typy definiowane przez użytkownika. 8/41

9/41 Użycie zmiennych Tymczasowe przechowywanie danych Modyfikacja danych przechowywanych w bazie Ponowne użycie

10/41 Nazwa zmiennej Musi zaczynać się od litery Może zawierać litery i cyfry Może zawierać znaki specjalne Nie może zawierać więcej niż 30 znaków Nie może zawierać słów zarezerwowanych

11/41 Wykorzystanie zmiennych Zmienne są: Deklarowane i opcjonalnie inicjalizowane w sekcji deklaracji Używane w sekcji wykonywalnej Przekazywane jako parametry do podprogramów w PL/SQL Używane do przechowywania wartości zwracanej przez podprogram w PL/SQL

12/41 Deklaracja i inicjalizacja Deklaracja zmiennych: DECLARE nazwa_zmiennej [CONSTANT] typ[(rozmiar)] [NOT NULL] [{:= DEFAULT} wartosc]; Np.: DECLARE v_wiek NUMBER(3); v_plec VARCHAR2(9); v_licznik NUMBER(4) NOT NULL := 0; v_suma NUMBER(10) DEFAULT 0; c_pi NUMBER := 3.14159;

13/41 Deklaracja i inicjalizacja DECLARE v_imie VARCHAR2(20) := 'Anna'; v_nazwisko VARCHAR2(30); BEGIN v_nazwisko := 'Nowacka'; DBMS_OUTPUT.PUT_LINE( 'Nazywam się ' imie ' ' nazwisko); END; /

14/41 Stałe Deklaracja stałych: DECLARE nazwa_stalej CONSTANT typ[(rozmiar)] {:= DEFAULT} wartosc; Np.: DECLARE c_procent CONSTANT NUMBER(2) := 10;

15/41 Specjalne znaki w zmiennych znakowych Dodatkowy znak apostrofu: v_string VARCHAR2(20) := 'I''m learning'; Określanie ogranicznika z notacją q : v_string := q'!i'm listening!'; v_string := q'[i'm bored]'; Określenie ogranicznika nq dla typów NCHAR i NVARCHAR: v_nstr NVARCHAR2(20) := nq'<i'm sleeping>'; v_nstr := nq'{i'm dreaming}';

16/41 %TYPE Atrybut %TYPE jest wykorzystywany aby zadeklarować zmienną takiego samego typu jak kolumna w tabeli czy inna zmienna. identyfikator tabela.nazwa_kolumny%type; Przykłady DECLARE v_imie pracownicy.imie%type; v_nazwisko pracownicy.nazwisko%type;

17/41 Zmienne rekordowe Deklaracja zmiennych rekordowych: DECLARE TYPE nazwa_typu_rekordowego IS RECORD ( pole1 typ [NOT NULL] [inicjalizacja] [, pole2 typ [NOT NULL] [inicjalizacja]...] ); nazwa_zmiennej typ_rekordowy; Np.: DECLARE TYPE r_adres IS RECORD ( v_ulica VARCHAR2(30), v_nr_domu VARCHAR2(4), v_nr_mieszkania VARCHAR2(4) ); vr_adres r_adres;

18/41 %ROWTYPE Atrybut %ROWTYPE jest wykorzystywany aby zadeklarować zmienną typu rekordowego zgodnego z typami kolumn podanej tabeli. DECLARE zmienna_rekordowa tabela%rowtype; Przykład: DECLARE vr_pracownik pracownicy%rowtype;

19/41 Zmienne związane Są tworzone w środowisku PL/SQL Są związane z sesją Tworzone z użyciem słowa kluczowego VARIABLE Używane w SQL i PL/SQL Dstępne nawet po zakończeniu wykonywania bloku PL/SQL Dostęp poprzez poprzedzenie ich dwukropkiem

20/41 Zmienne związane VARIABLE b_wyplata NUMBER; VARIABLE b_id NUMBER; BEGIN :b_wyplata := 2500; :b_id := 130; END; / PRINT b_wyplata -- to samo zapytanie, -- plan wykonania opracowywany tylko raz SELECT * FROM PRACOWNICY WHERE PRACOWNIK_ID=:b_id;

21/41 Konwersja typów danych Niejawna konwersja Znaki i liczby Znaki i daty Jawna konwersja z użyciem funkcji wbudowanych, np. To_char, To_number, To_date, To_timestamp z użyciem funkcji zdefiniowanych przez użytkownika

Zasięg i widoczność zmiennej Zasięg zmiennej ograniczony jest do tej części programu, w której jest ona zadeklarowana i widoczna Widoczność zmiennej jest tym fragmentem programu, w którym mamy dostęp do zmiennej bez zewnętrznego kwalifikatora: BEGIN <<zewnetrzny>> DECLARE v_imie_ojca VARCHAR2(20):='Piotr'; v_data_ur DATE:='1972-04-20'; BEGIN DECLARE v_imie_dziecka VARCHAR2(20):='Katarzyna'; v_data_ur DATE:='2002-12-12'; BEGIN DBMS_OUTPUT.PUT_LINE('Imię ojca: ' v_imie_ojca); DBMS_OUTPUT.PUT_LINE('Data urodzenia: ' zewnetrzny.v_data_ur); DBMS_OUTPUT.PUT_LINE('Imię dziecka: ' v_imie_dziecka); DBMS_OUTPUT.PUT_LINE('Data urodzenia: ' v_data_ur); END; END; END zewnetrzny; 22/41

23/41 w PL/SQL Takie same operatory jak w SQL: logiczne (AND, OR, NOT) arytmetyczne (+,-,/,*) konkatenacji ( ) porównania (=,<>,!=,<,<=,>,>=, IS NULL, IS NOT NULL, LIKE, BETWEEN, IN) negacji (-) nawiasy okrągłe Dodatkowy operator dla potęgowania (**)

24/41 Jak dołączać instrukcje SQL w kodzie PL/SQL?

25/41 Wbudowane funkcje SQL W kodzie PL/SQL można używać wbudowanych funkcji SQL zwracających pojedynczy wiersz (Upper, Length, Substr, Round, Last_day, To_char itd.) nie można używać funkcji DECODE i funkcji agregujących

26/41 Sekwencje Można używać sekwencji: DECLARE v_id NUMBER; BEGIN v_id := nowa_sek.nextval; END; /

27/41 W bloku PL/SQL można używać niektórych instrukcji SQL: zapytania: SELECT z klauzulą INTO, DML: INSERT, UPDATE, DELETE, MERGE, TCL: COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION, LOCK.

28/41 Instrukcja SELECT Instrukcja SELECT musi zwrócić tylko jeden wiersz!!! Klauzula INTO jest wymagana!!! Nazwy kolumn tabel bazodanowych mają pierszeństwo przed nazwami zmiennych lokalnych!!! SELECT lista_wyrazen INTO {lista_zmiennych zmienna_rekorodwa} FROM lista_relacji...;

29/41 Przykład instrukcji SELECT DECLARE v_imie pracownicy.imie%type; BEGIN SELECT imie INTO v_imie FROM pracownicy WHERE id_pracownika = 200; DBMS_OUTPUT.PUT_LINE('Imie ' v_imie); END; /

30/41 Składnia instrukcji INSERT, UPDATE i DELETE jest taka sama jak w SQL ale mamy dodatkowo klauzulę RETURNING wyrazenie INTO zmienna: INSERT INTO dzialy (dzial_id, dzial_nazwa) VALUES (90, 'Rozrywka') RETURNING dzial_id INTO v_id; Istnieje możliwość wykorzystania zmiennych rekordowych: INSERT INTO tabela VALUES zmienna_rekordowa; UPDATE tabela SET ROW = zmienna_rekordowa WHERE warunek;

31/41 IF IF warunek THEN instrukcja; END IF; IF warunek THEN instrukcja1; ELSE instrukcja2; END IF; IF warunek1 THEN instrukcja1; ELSIF warunek2 THEN instrukcja2;... ELSE instrukcja_n; END IF;

32/41 CASE CASE wyrazenie WHEN wyrazenie1 THEN instrukcja1; WHEN wyrazenie2 THEN instrukcja2;... [ELSE instrukcja_n]; END CASE; CASE WHEN warunek1 THEN instrukcja1; WHEN warunek2 THEN instrukcja2;... [ELSE instrukcja_n]; END CASE;

33/41 Pętle LOOP instrukcje; [IF warunek THEN EXIT; END IF;] [EXIT WHEN warunek;] END LOOP; WHILE warunek LOOP instrukcje; END LOOP; FOR licznik IN [REVERSE] min..max LOOP instrukcje; END LOOP;

34/41 Sugerowane użycie pętli Pętli prostej używamy, kiedy instrukcje wewnątrz muszą się wykonać przynajmniej raz Pętli WHILE używamy kiedy warunek musi być sprawdzany przed iteracją Pętli FOR używamy jeśli znana jest liczba iteracji

35/41 Przykład z pętlą DECLARE v_suma SIMPLE_INTEGER := 1; BEGIN FOR i IN 1..10 LOOP v_suma := v_suma + i; DBMS_OUTPUT.PUT_LINE('Suma wynosi ' v_suma); END LOOP; END; /

36/41 Instrukcja CONTINUE Pozwala rozpocząć nową iterację Pozwala na przekazanie sterowania w pętli do następnej iteracji Składnia taka sama jak w klauzuli EXIT

37/41 Przykład pętli z instrukcją CONTINUE DECLARE v_suma_cala SIMPLE_INTEGER := 0; v_czesc SIMPLE_INTEGER := 1; BEGIN FOR i IN 1..10 LOOP v_suma_cala := v_suma_cala + i; DBMS_OUTPUT.PUT_LINE('Całkowita wartość w iteracji ' i ' is ' v_suma_cala); CONTINUE WHEN i > 5; v_czesc := v_czesc + i; DBMS_OUTPUT.PUT_LINE('Częściowa wartość w iteracji ' i ' is ' v_czesc); END LOOP; END;

38/41 Instrukcja NULL BEGIN IF warunek THEN instrukcje; ELSE NULL; END IF; END;

39/41 Interakcje pobieranie danych (zmienne podstawienia): v_nazwisko := &nazwisko; wyprowadzenie danych (włączona zmienna środowiskowa SERVEROUTPUT ON): dbms_output.put_line(tekst); dbms_output.new_line; dbms_output.put_line( 'Hello' CHR(10) ' World'); wyczyszczenie ekranu (nie działa w PL/SQL): CLEAR SCREEN; CL SCR; -- skrócona forma

40/41 PL/SQL pozwala na: korzystanie ze zmiennych, stałych, korzystanie z instrukcji sterujących, przetwarzanie sekwencyjne zorientowane na dane, i wiele innych o czym na następnym wykładzie...

41/41 http://docs.oracle.com/cd/b28359_01/appdev. 111/b28370/toc.htm M. Lentner, Oracle 9i Kompletny podrêcznik u ytkownika, PJWSTK - W-wa, 2003 http://www.ploug.org.pl/showhtml.php?file= szkola/szkola_9/materialy http://plsql-tutorial.com/index.htm http://www.toadworld.com/platforms/oracle/w/ wiki/8243.plsql-obsession.aspx