ORACLE Kursory Atrybuty kursora SQL Atrybuty kursorów

Transkrypt

ORACLE Kursory Atrybuty kursora SQL Atrybuty kursorów
Kursory
• Pozwalaj na analizowanie składni i
wykonywanie komend SQL
• Blok PL/SQL: kursory niejawne i jawne
• PL/SQL zarzadz automatycznie
kursorem niejawnym
• Kursory niejawne: deklarowane dla
wszystkich instrukcji DML oraz SELECT
• Kursory jawne: delarowane przez
programist
ą
ORACLE
(Wykład 2)
ą
ę
Atrybuty kursora SQL
SQL%ROWCOUNT
SQL%FOUND
Atrybuty kursorów - przykład
Liczba wierszy, których dotyczyła
ostatnia instrukcja SQL
Atrybut logiczny, który przyjmuje
warto TRUE, gdy ostatnia
instrukcja dotyczyla jednego lub
wi cej wierszy
ś
ć
ę
SQL%NOTFOUND
Atrybut logiczny, który przyjmuje
warto TRUE, gdy ostatnia
instrukcja dotyczyła zerowej liczby
wierszy
SQL%ISOPEN
Zawsze przyjmuje warto FALSE
poniewa PL/SQL zamyka kursory
natychmiast po ich wykonaniu
ś
DECLARE
v_usuniete VARCHAR2(30);
ć
ś
ć
Ŝ
BEGIN
DELETE
FROM zamowiona_ksiazka
WHERE id_zamowienia = ∥
v_usuniete := TO_CHAR(SQL%ROWCOUNT)
|| ‘rekordow usunietych.’;
END;
Atrybuty kursorów niejawnych
Kursory jawne - deklaracja
PROCEDURE KASUJ_KSIAZKE (p_isbn ksiazka.isbn%TYPE) IS
CURSOR nazwa_kursora [(parametr [, parametr] … )] IS instrukcja_select;
parametr ::= nazwa_parametru typ danych [{:= | DEFAULT wyra enie}]
Ŝ
BEGIN
DELETE FROM KSIAZKA
WHERE isbn = p_isbn;
IF SQL%NOTFOUND THEN
dbms_output.put_line(‘Nie znaleziono rekordu’);
END IF;
END;
CURSOR kursor (p_isbn VARCHAR(10)) IS
SELECT *
FROM ksiazka
WHERE isbn = p_isbn;
1
Kursory jawne
Sterowanie kursorami jawnymi
DECLARE ….. ;
NIE
OPEN nazwa_kursora [(parametr [, parametr] ...)];
DECLARE
OPEN
FETCH
PUSTY?
TAK
CLOSE
FETCH nazwa_kursora INTO zmienna [ , zmienna ...];
CLOSE nazwa_kursora;
DECLARE
CURSOR k_cursor IS SELECT * FROM zamowiona_ksiazka
WHERE isbn = 1;
k_record zamowiona_ksiazka%ROWTYPE;
v_ilosc zamowiona_ksiazka. ilosc %TYPE := 0;
BEGIN
OPEN k_cursor;
LOOP
FETCH k_cursor INTO k_record;
IF k_cursor%NOTFOUND THEN
EXIT;
END IF;
v_ilosc := v_ilosc + k_record.ilosc;
END LOOP;
dbms_output.put_line(k_cursor%ROWCOUNT);
dbms_output.put_line(v_ilosc);
CLOSE k_cursor;
END;
Kursory jawne - przykład
P ta kursorowa FOR
FOR nazwa_rekordu IN nazwa_kursora LOOP
instrukcja-1;
instrukcja-2;
…….
END LOOP;
Niejawne instrukcje OPEN, FETCH, CLOSE
zmienna nazwa_rekordu -- zadeklarowana
niejawnie
Kursor w p tli FOR
DECLARE
CURSOR a_cursor IS SELECT * FROM autor;
DECLARE
CURSOR k_cursor
(p_zam zamowienie.id_zamowienia%TYPE) IS
SELECT *
FROM zamowiona_ksiazka
WHERE id_zamowienia = p_zam;
BEGIN
FOR i IN k_cursor(1) LOOP
dbms_output.put_line(i.isbn);
END LOOP;
END;
BEGIN
FOR i IN a_cursor LOOP
dbms_output.put_line(i.nazwisko);
END LOOP;
END;
BEGIN
FOR i IN (SELECT * FROM autor) LOOP
dbms_output.put_line(i.nazwisko);
END LOOP;
END;
2
Atrybuty kursorow jawnych
Typy danych
%ROWCOUNT
Liczba wierszy, sprawdzonych
w kursorze w danym momencie
%FOUND
Atrybut logiczny, który przyjmuje
warto TRUE, je li instrukcja FETCH
zwróci wiersz
ś
%NOTFOUND
ć
ś
Atrybut logiczny, który przyjmuje
warto TRUE, je li ostatnia
instrukcja FETCH nie zwrócila adnego
wiersza
ś
ć
Proste
BINARY_INTEGER, PL_INTEGER, BOOLEAN,
LONG, NUMBER([dokladnosc, skala]), DATE, ...
Zło one
Referencyjne
RECORD, TABLE,
VARRAY
REF CURSOR, REF
Ŝ
ś
Ŝ
%ISOPEN
Obiektowe ...
Atrybut logiczny, który przyjmuje
warto TRUE, je li kursor jest otwarty
ś
ć
ś
Konwencje nazewnicze kodu
zmienna
stała
kursor
v_nazwa
v_cena
c_stala
c_wspol
nazwa_cursor
autor_cursor
wyj tek
e_nazwa
e_too_many
typ TABLE
nazwa_table_type
autor_table_type
TABLE
nazwa_table
dostawca_table
RECORD
nazwa_record
ksiazka_record
ą
3

Podobne dokumenty