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