PL/SQL – dalsza wędrówka

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Język C/C++ Funkcje.
Podział i zastosowanie
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Wykład 3 Prowadzący: dr Paweł Drozda
Skrypty, procedury przechowywane i wyzwalane
Programowanie w języku Visual Basic
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
PROGRAMOWANIE STRUKTURALNE
PROGRAMOWANIE STRUKTURALNE
Bazy danych 8. SQL podstawy P. F. Góra semestr letni 2004/05.
PHP + MySQL część II.
Język SQL ma ciekawe możliwości tworzenia zapytań
MS Access 2000 Kwerendy Piotr Górczyński 25/08/2001.
Bazy danych II Instrukcja INSERT Piotr Górczyński 25/08/2001.
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
20/09/ Języki programowania 1 Piotr Górczyński Kreator form.
Język SQL – zapytania zagnieżdżone (podzapytania)
ODE Informacje wstępne. Pojęcia podstawowe n Obiektowa baza danych u język komunikacji u ziarnistość obiektów u identyfikacja obiektów n Transakcja -
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 7: Relacje i ograniczenia integralnościowe Język definiowania danych - DDL (Data Definition.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 8: Perspektywy i sekwencery.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 9: Język manipulowania danymi DML (Data Manipulation Language)
Kurs Pascala – spis treści
Struktury.
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
ZSBD PL/SQL CZĘŚĆ 3 Wykład 5 Prowadzący: dr Paweł Drozda.
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
SQL-owskie szlaki górskie
SO – LAB3 Wojciech Pieprzyca
BD-LAB6 Wojciech Pieprzyca
Komunikacja z arkuszem. Iteracje. Funkcje.
9. KOORDYNACJA PROCESÓW WSPÓŁBIEŻNYCH PRZY UŻYCIU INTERPRETATORA
Język SQL (Structured Query Language) DDL (Data Definition Language)
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
Podstawy programowania II
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
Definicja pliku tekstowego Operacje wykonywane na plikach tekstowych
PL/SQL Zajęcia nr II PL/SQL(2) M. Rakowski - WSISiZ.
dr hab. Ryszard Walkowiak prof. nadzw.
Pliki Pojęcie i rodzaje plików Definicja typu plikowego Operacje wykonywane na plikach elementowych.
Pliki tekstowe – A. Jędryczkowski © 2007 Turbo Pascal umożliwia wykorzystanie w programach plików tekstowych. Pliki takie zawierają informację niezakodowaną
Janusz ROŻEJ GENERATORY APLIKACJI Generatory aplikacji Janusz ROŻEJ
Użytkownicy i przywileje Sesja - przykład Błędy Komunikacja międzyskryptowa Wykład 83PD Technologie internetowe.
ASP BAZY. 2.2 S. Wolek Wst. do Inf. Połączenie z bazą danych przez ADO (ActiveX Data Object) do: - źródła ODBC - bazy z podanie nazwy sterownika ODBC.
SQL - Structured Query Language
Andrzej Repak Nr albumu
Zbiory i rekordy mgr inż. Agata Pacek. Deklaracja typu zbiorowego (określa ilość elementów w zbiorze) type biegi=set of 0..6; Definiowanie zmiennej typu.
Programowanie baz danych
MICROSOFT Access TWORZENIE MAKR
ASP BAZY DANYCH. 2 S. Wolek Wst. do Inf. Połączenie z bazą danych przez ADO (ActiveX Data Object) do: - źródła ODBC - bazy z podanie nazwy sterownika.
Projektowanie stron WWW
System plików.
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Autor: Damian Urbańczyk
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
XHTML Tabele Damian Urbańczyk. Podstawy budowy tabel Strony WWW mogą zawierać w sobie tabele, czasem te tabele mogą tworzyć strukturę strony, odpowiadającą.
Komendy SQL do pracy z danymi
Relacja (ang.relation) Po podzieleniu danych na tabele i zdefiniowaniu pól kluczy podstawowych trzeba wprowadzić do systemu bazy danych informacje na temat.
BAZY DANYCH MS Access.
Współpraca PHP i MySQL Wygodniejszym i wydajniejszym sposobem przechowywania i korzystania z danych zapisanych na serwerze jest współpraca z relacyjna.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
STOS. STL (ang. Standard Template Library) jest to biblioteka zawierająca algorytmy, pojemniki, iteratory oraz inne konstrukcje w formie szablonów, gotowe.
Temat: Tworzenie bazy danych
Teoretyczne założenia
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
Listy.
Strukturalny język zapytań SQL - historia
Zapis prezentacji:

PL/SQL – dalsza wędrówka Kursory

O kursorach Każde polecenie SQL, umieszczone w programie PL/SQL, w trakcie wykonania zostaje skojarzone z obszarem pamięci, w którym przechowywane są informacje o przetwarzanym poleceniu: m.in. status wykonania polecenia i zbiór odczytanych z bazy danych rekordów w przypadku zapytania. Dostęp w programie PL/SQL do tego obszaru pamięci, nazywanego również obszarem roboczym, jest możliwy za pomocą specjalnej struktury, tzw. kursora. Każdy kursor posiada swoją własną nazwę i może służyć np. do odczytania liczby rekordów, jakie zmodyfikowało polecenie UPDATE w programie PL/SQL, pobierania po kolei rekordów, jakie z bazy danych odczytało zapytanie, czy teżsprawdzenia, czy polecenie DELETE usunęło rekordy. Wyróżniamy dwa rodzaje kursorów: jawne i niejawne. Kursory jawne są deklarowane przez programistę i służą do odczytu zbioru rekordów z bazy danych (jak pamiętamy, zwykłe polecenie SELECT umieszczone w programie PL/SQL może odczytać z bazy danych tylko jeden rekord). Z kolei kursory niejawne są tworzone automatycznie dla każdego z poleceń UPDATE, INSERT, DELETE i SELECT INTO, jakie zostaje umieszczone w programie. Kursory niejawne najczęściej służą do sprawdzenia stanu polecenia, dla którego kursor niejawny został utworzony. Kursor jest jedyną metodą umożliwiającą w programie PL/SQL odczyt zbioru danych

Definicja Kursor służy do pobierania wierszy zwróconych przez zapytanie. Wiersze są pobierane do kursora za pomocą zapytania, a następnie są kolejno odczytywane z niego. Korzystanie z kursorów zwykle przebiega w pięciu etapach: Deklarowanie zmiennych, w których będą przechowywane wartości kolumn dla wiersza Deklarowanie kursora. Deklaracja zawiera zapytanie Otwarcie kursora Pobieranie kolejnych wierszy z kursora i zapisywanie wartości kolumn w zmiennych zdeklarowanych w punkcie 1. Następnie robimy coś z tymi zmiennymi, np. wyświetlamy ich zawartość na ekranie, używamy w obliczeniach etc. Zamykanie kursora Kursor to nazwa obszaru roboczego, w którym mieści się wynik zapytania (result set). Wewnątrz kursora wyróżniamy bieżący wiersz (current row). Kursor może być jawny (explicit) lub niejawny (implicit).

Deklarowanie kursora DECLARE CURSOR nazwa [lista parametrów] [RETURN typ zwracany] IN zapytanie SQL Nazwa kursora nie jest zmienną, lecz identyfikatorem. Do kursora nie można przypisać wartości Parametry są widoczne tylko wewnątrz kursora, nie można związać z nim żadnych ograniczeń DECLARE CURSOR c_pracownicy (zepsol NUMBER DEFAULT 10) IS SELECT nazwisko, etat, zatrudniony, placa_pod FROM pracownicy WHERE id_zesp=zesp

Otwieranie kursora Otwarcie kursora powoduje wykonanie związanego z nim zapytania i zidentyfikowanie zbioru wynikowego zawierającego krotki spełniające kryteria wyszukiwania OPEN nazwa_kursora [lista parametrów aktualnych] DECLARE CURSOR c_prac (zespol NUMBER, posada VARCHAR2) IS SELECT * FROM pracownicy WHERE id_zesp = zespol AND etat = posada; BEGIN ... v_etat := ‘PROFESOR’; OPEN c_prac(10, ’ASYSTENT’); OPEN c_prac(50, v_etat);

Pobieranie z kursora FETCH nazwa_kursora INTO lista zmiennych | rekord; Każde wykonanie polecenia FETCH powoduje odczytanie bieżącego wiersza kursora i przesunięcie znacznika kursora na kolejny wiersz. Na liście zmiennych musi się znajdować taka sama liczba zmiennych jak liczba atrybutów w kursorze. Odpowiednie zmienne i atrybuty muszą się zgadzać co do typu. DECLARE CURSOR c_prac IS SELECT nazwisko, etat FROM pracownicy; v_nazwisko PRACOWNICY.NAZWISKO%TYPE; v_etat PRACOWNICY.ETAT%TYPE; BEGIN OPEN c_prac; FETCH c_prac INTO v_nazwisko, v_etat;

Zamykanie kursora CLOSE nazwa kursora; Zamknięcie kursora powoduje, że kursor staje się nieaktywny a zbiór wynikowy związany z kursorem staje się niezdefiniowany. Zamknięty kursor można powtórnie otworzyć, np. z innymi parametrami. Każde odwołanie się do zamkniętego (lub jeszcze nie otwartego) kursora powoduje błąd INVALID_CURSOR

Atrybuty kursora • %FOUND – wartością atrybutu jest TRUE jeśli ostatnia operacja FETCH odczytała krotkę z kursora. W przeciwnym wypadku (tzn. kiedy odczyt się nie udał) atrybut przyjmuje wartość FALSE. Przed pierwszym odczytem atrybut ma wartość NULL • %NOTFOUND – wartością atrybutu jest FALSE jeśli ostatnia operacja FETCH odczytała krotkę z kursora. W przeciwnym wypadku (tzn. kiedy odczyt się nie udał) atrybut przyjmuje wartość wypadku (tzn. kiedy odczyt się nie udał) atrybut przyjmuje wartość TRUE. Przed pierwszym odczytem atrybut ma wartość NULL • %ROWCOUNT – wartością atrybutu jest liczba odczytanych z kursora krotek. Przed pierwszym odczytem atrybut ma wartość 0 • %ISOPEN – wartością atrybutu jest TRUE jeśli kursor jest otwarty i FALSE jeśli kursor jest zamknięty.

Atrybuty kursora niejawnego Każde polecenie DML (INSERT, UPDATE, DELETE, SELECT FOR UPDATE) powoduje utworzenie kursora niejawnego (ang. implicit cursor). Dla takiego kursora można sprawdzać wartości następujących atrybutów: • SQL%ROWCOUNT: liczba wierszy zmodyfikowanych przez polecenie • SQL%FOUND: TRUE jeśli ostatnie polecenie zmodyfikowało jakiekolwiek wiersze • SQL%NOTFOUND: TRUE jeśli ostatnie polecenie nie zmodyfikowało żadnych wierszy • SQL%ISOPEN: zawsze FALSE (kursor niejawny jest zamykany natychmiast po zakończeniu polecenia)

Użycie kursora DECLARE CURSOR c_prac (zespol NUMBER DEFAULT 10) IS SELECT nazwisko, etat FROM pracownicy WHERE id_zesp = zespol ORDER BY placa_pod DESC; v_nazwisko PRACOWNICY.NAZWISKO%TYPE; v_etat PRACOWNICY.ETAT%TYPE; BEGIN OPEN c_prac(30); LOOP FETCH c_prac INTO v_nazwisko, v_etat; EXIT WHEN c_prac%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_nazwisko || ' , ' || v_etat); END LOOP; CLOSE c_prac; END;

Pętla FOR z kursorem DECLARE CURSOR c (minplaca NUMBER) IS SELECT * FROM pracownicy WHERE placa_pod > minplaca; BEGIN FOR c_rec IN c(800) LOOP DBMS_OUTPUT.PUT_LINE(c_rec.nazwisko || ' zarabia ' || c_rec.placa_pod || ' i pracuje jako ' || c_rec.etat); END LOOP; END; • Zmienna sterująca pętlą jest deklarowana automatycznie jako zmienna typu kursor%ROWTYPE • Kursor jest otwierany automatycznie • W każdym przebiegu pętli jedna krotka jest pobierana z kursora i umieszczana w zmiennej sterującej pętlą • Po pobraniu ostatniej krotki kursor jest automatycznie zamykany

Póki co to tyle Radości i uśmiechu pełna niech będzie wasza nora Bo od dziś potraficie używać kursora 