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

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

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

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

PL/SQL. Zaawansowane tematy PL/SQL

PODSTAWY BAZ DANYCH 13. PL/SQL

Bloki anonimowe w PL/SQL

1. ELEMENTY JĘZYKA PL/SQL

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

Oracle PL/SQL. Paweł Rajba.

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

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

Bloki anonimowe w PL/SQL

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

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

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

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

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

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

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

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

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

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

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

Język PL/SQL Wprowadzenie

Język PL/SQL Wprowadzenie

15. Funkcje i procedury składowane PL/SQL

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

Procedury i funkcje składowane

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

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

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

Składowane procedury i funkcje

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

Deklarowanie kursora

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

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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

Pakiety podprogramów Dynamiczny SQL

Oracle PL/SQL. Paweł Rajba.

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

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

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

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

Materiały do laboratorium MS ACCESS BASIC

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.

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

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

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

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

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

Struktury sterowania PL/SQL

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

Oracle11g: Programowanie 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

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Zaawansowane bazy danych i hurtownie danych semestr I

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

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

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

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

Microsoft SQL Server Podstawy T-SQL

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

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

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

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

Wyzwalacze (triggery) Przykład

Tabele wykorzystywane w przykładach

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

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

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

Oracle11g: Wprowadzenie do SQL

Wykład 8. SQL praca z tabelami 5

Wykład 5. SQL praca z tabelami 2

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

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

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

Indeksy. Indeks typu B drzewo

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

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.

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

Język SQL, zajęcia nr 1

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

SQL (ang. Structured Query Language)

Cele. Definiowanie wyzwalaczy

Zaawansowane bazy danych i hurtownie danych semestr I

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

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

Oracle10g: Programowanie w PL/SQL

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

Zarzadzanie transakcjami. Transakcje

Systemy GIS Tworzenie zapytań w bazach danych

Transkrypt:

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 tylko w bloku, w którym jest zadeklarowana, Kiedy zmienna wychodzi z zasięgu, system zwalnia i pamięć i takiej zmiennej nie można używać, Zmienna z bloku zagnieżdżonego jest niewidoczna w bloku zewnętrznym, Zmienna zadeklarowana w bloku zewnętrznym jest widoczna w bloku zagnieżdżonym. Zasięg zmiennych v_nazwa VARCHAR2(20); v_druga_nazwa VARCHAR2(20); v_druga_nazwa dostępna jest w bloku zagnieżdżonym v_nazwa dostępna jest w całym bloku 1

Widoczność zmiennych Gdy mam dwie zmienne o tych samych nazwach zadeklarowane w bloku zewnętrznym i zagnieżdżonym to zmienna ta jest ukryta w bloku wewnętrznym, Można to rozwiązać używając etykiet. Widoczność zmiennych v_nazwa VARCHAR2(20); v_nazwa VARCHAR2(20); Etykiety Zmienne powiązane <<l_zewnetrzna>> v_nazwa VARCHAR2(20); v_nazwa NUMBER(2); l_zewnetrzna.v_nazwa:= blok_zew ; DBMS_OUTPUT.PUT_LINE(l_zewnetrzna.v_nazwa); tzw. zmienne środowiskowe, podobne własności do zmiennych globalnych, Widoczne i dostępne w wielu programach, Często używane są do przekazywania wartości z PL/SQL do SQL, do optymalizacji zapytań, W PL/SQL zachowują się jak zwykłe zmienne. 2

Zmienne powiązane Zmienne powiązane - przykład deklaracja VARIABLE nazwa typ_danych; odwołanie do zmiennej :nazwa wyświetlenie zawartości zmiennej PRINT nazwa; VARIABLE v_imie VARCHAR2(20); SELECT first_name INTO :v_imie FROM employees WHERE employee_id=200; / PRINT v_imie; Zmienne powiązane - przykład Zmienne powiązane - przykład VARIABLE v_imie VARCHAR2(20); :v_imie := LEX ; / PRINT v_imie; SELECT last_name FROM employees WHERE first_name= :v_imie; VARIABLE v_imie VARCHAR2(20); SET AUTOPRINT ON; :v_imie := LEX ; / automatyczne włączenie wyświetlania zmiennych powiązanych SELECT last_name FROM employees WHERE first_name= :v_imie; 3

Struktury sterujące IF-THEN Wykonywanie warunkowe Wykonywanie w pętli Nawigacja sekwencyjna IF warunek THEN operacje; v_wiek NUMBER := 19; IF v_wiek>=18 THEN DBMS_OUTPUT.PUT_LINE( Jesteś pełnoletni ); IF-THEN-ELSE IF-THEN-ELSE IF warunek THEN operacje; [ELSE operacje;] v_wiek NUMBER := 19; IF v_wiek>=18 THEN DBMS_OUTPUT.PUT_LINE( Jesteś pełnoletni ); ELSE DBMS_OUTPUT.PUT_LINE( Nie jesteś pełnoletni ); 4

IF-THEN-ELSEIF IF-THEN-ELSEIF IF warunek THEN operacje; [ELSIF warunek THEN operacje;] [ELSE operacje;] v_wiek NUMBER := 19; IF v_wiek<18 THEN DBMS_OUTPUT.PUT_LINE( Nie jesteś pełnoletni ); ELSIF v_wiek<40 THEN DBMS_OUTPUT.PUT_LINE( Nie jesteś w średnim wieku ); ELSE DBMS_OUTPUT.PUT_LINE( Jesteś stary ); NULL w instrukcji IF v_wiek NUMBER; IF v_wiek>=18 THEN DBMS_OUTPUT.PUT_LINE( Jesteś pełnoletni ); Jeśli wyrażenie IF zwraca NULL to sterowanie jest przekazywane do ELSE CASE Od wersji 9i, Alternatywa warunkowego wykonywania kodu, upraszczająca składnię, CASE warunek WHEN test1 THEN operacje; WHEN test1 THEN operacje; [ELSE operacje;] END CASE; 5

CASE CASE z wyszukiwaniem v_ocena VARCHAR2(1); v_ocena_konw NUMBER(1); SELECT ocena INTO v_ocena FROM uczen WHERE przedmiot= algebra and id= 11234 ; CASE v_ocena WHEN A THEN v_ocena_konw:=5; WHEN B THEN v_ocena_konw:=4; ELSE v_ocena_konw:=0; END CASE; W takiej konstrukcji nie trzeba przekazywać wyrażenia na początku instrukcji CASE, Każda klauzula WHEN przyjmuje wyrażenie, którego wartość trzeba sprawdzić, Można podawać albo to samo wyrażenie w każdej klauzuli WHEN, lub za każdym razem inne. CASE z wyszukiwaniem Wykonywanie w pętli CASE WHEN v_dochod<85000 THEN v_podatek:=dochod*0.18; WHEN v_dochod>=85000 THEN v_podatek:=85000*0.18+(v_dochod-85000)*0.32; ELSE DBMS_OUTPUT.PUT_LINE( Brak dochodu ); END CASE; Pętle proste Pętle liczbowe FOR Pętle WHILE 6

Pętle proste Pętle proste LOOP operacje; EXIT [WHEN warunek]; v_licznik PLS_INTEGER :=1; LOOP DBMS_OUTPUT.PUT_LINE( Wiersz numer v_licznik); v_licznik:=v_licznik+1; EXIT WHEN v_licznik=10; Pętla FOR Pętla FOR FOR licznik IN [REVERSE] liczba_porzadkowa..liczba_koncowa LOOP operacje; FOR v_licznik IN 1..9 LOOP DBMS_OUTPUT.PUT_LINE( Wiersz numer v_licznik); 7

Pętla WHILE Pętla WHILE WHILE warunek LOOP operacje; v_licznik PLS_INTEGER :=1; WHILE v_licznik<10 LOOP DBMS_OUTPUT.PUT_LINE( Wiersz numer v_licznik); v_licznik:=v_licznik+1; Pętle i etykiety Pętle i etykiety Umożliwiają korzystanie z pętli tak, jakby miały nazwę, Nazywają nienazwane elementy języka PL/SQL, Wówczas możemy używać konstrukcji typu: EXIT nazwa_petli; EXIT nazwa_petli WHEN v_licznik=10; <<nazwa_petli>> pętla, instrukcje END LOOP nazwa_petli; opcjonalne 8

CONTINUE SQL w PL/SQL Dodatkowe sterownie pętlą, Przekazuje sterowanie do następnej iteracji, Od wersji 11g, Można używać w połączeniu z etykietami. FOR i IN 1..10 LOOP DBMS_OUTPUT.PUT_LINE( i ); CONTINUE WHEN i> 5 ; DBMS_OUTPUT.PUT_LINE( tylko mniejsze, rowne 5 ); PL/SQL nie wspiera bezpośrednio poleceń DDL i DCL, w tym celu należy używać dynamicznego SQL, PL/SQL wspiera także polecenia z zakresu obsługi transakcji, Do pobierania danych służy polecenie SELECT. Polecenie SELECT SELECT lista_wyboru [INTO lista_zmiennych] FROM lista_tabel [WHERE warunki] [ORDER BY lista_kolumn]; Polecenie SELECT Lista_wyboru kolumny, łańcuchy, funkcje SQL, *, operacje arytmetyczne, Lista_zmiennych zmienna lub grupa zmiennych odpowiadających wartościom z listy wyboru, typy skalarne, zakotwiczone lub rekordy, Lista_tabel tabele, widoki, Pobrane wartości muszą trafić do zmiennej za pomocą INTO, Polecenie musi zwracać pojedynczy wiersz. 9

Polecenie SELECT Polecenie SELECT v_salary employees.salary%type; v_last_name employees.last_name%type; SELECT last_name, salary INTO v_last_name, v_salary FROM employees WHERE employees_id=105; DBMS_OUTPUT.PUT_LINE( Pracownik v_last_name); DBMS_OUTPUT.PUT_LINE( Zarabia v_salary); v_salary employees.salary%type; v_jobs employees.job_id%type := IT_PROG ; SELECT AVG(salary) INTO v_salary FROM employees WHERE job_id=v_jobs; DBMS_OUTPUT.PUT_LINE( Na stanowisku v_jobs); DBMS_OUTPUT.PUT_LINE( Średnia płaca wynosi v_salary); Rekordy Rekordy Zbiór zmiennych różnych typów, Wprowadzone w bazie danych Oracle 7, Typami pól rekordu mogą być wszystkie typy danych dostępne w Oracle, zdefiniowane przez użytkownika oraz kolekcje, Bardzo często zawartość rekordów jest wzorowana na strukturze tabel z bazy danych, Może mieć dowolną liczbę pól, Pola mogą mieć zainicjowaną wartość oraz być zdefiniowane jako NOT NULL, Są definiowane w części deklaracyjnej bloków, funkcji czy procedur, Mogą być zagnieżdżone, Definiowane za pomocą atrybutu %ROWTYPE lub jawnie. 10

%ROWTYPE Powoduje dziedziczenie definicji wierszy po kursorach, tabelach, obiektach lub widokach, Nazwy i typy pól rekordu są tworzone na podstawie wskazanego wiersza, identyfikator tabela%rowtype; v_employee employees%rowtype; v_jobs jobs%rowtype; Definicja jawna Definiowanie typu rekordowego TYPE nazwa_rec IS RECORD (deklaracja_pola [,deklaracja_pola] ); Definiowanie zmiennej typu rekordowego Identyfikator nazwa_rec; Deklaracja pola nazwa_pola {typ tabela.kolumna%type tabela%rowtype} [[NOT NULL] { := DEFAULT } wyrażenie] Deklaracja jawna TYPE r_emp IS RECORD (v_numer NUMBER(2), v_pensja NUMBER(8) :=1000, v_zatrudnienie employees.hire_date%type, v_spis jobs%rowtype); v_my_rec r_emp; Inicjowanie wartości pól v_my_rec.v_pensja:=v_my_rec.v_pensja+200; v_my_rec.v_zatrudnienie:=sysdate; v_my_rec.v_numer:=1; SELECT * INTO v_my_rec.v_spis FROM employees WHERE employee_id=105; DBMS_OUTPUT.PUT_LINE(v_my_rec.v_numer v_my_rec.v_spis.last_name TO_CHAR(v_my_rec.v_zatrudnienie TO_CHAR(v_my_rec.v_pensja) ); 11

Zagnieżdżanie Do tworzenia złożonych typów rekordowych można używać tylko jawnej definicji, Nie ma ograniczeń w zagnieżdżaniu, jeśli chodzi o poziomy, Wstawianie rekordu do tabeli v_rec employees%rowtype; SELECT * INTO v_rec FROM employees WHERE employee_id=105; INSERT INTO new_employees VALUES (v_rec.employee_id, v_rec.first_name, v_rec.last_name, ); Wstawianie rekordu do tabeli v_rec employees%rowtype; SELECT * INTO v_rec FROM employees WHERE employee_id=105; INSERT INTO new_employees VALUES v_rec; Modyfikacja za pomocą rekordów v_rec employees%rowtype; v_hire_date employees.hire_date%type; SELECT * INTO v_rec FROM employees WHERE employee_id=105; v_rec.hire_date:=sysdate; UPDATE employees SET ROW = v_rec WHERE employee_id=105; 12

Wykorzystana literatura 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 13