oracle - Aragorn
Transkrypt
oracle - Aragorn
ORACLE ZJAZD 3 Bloki PL/SQL, kursory Zad. 1 Stworzyć tabele: Ksiazka1 (będącą kopią tabeli Ksiazka) oraz Wiad składającą się z dwóch kolumn (jednej numerycznej, drugiej tekstowej). Tabela Ksiazka1 powinna zawierać wszystkie wiersze tabeli Ksiazka. Zad. 2 Stworzyć blok PL/SQL, w którym wybrane by zostały tytuły dwóch najdroższych książek. Przykład: "Potop" 100 "Zemsta" 90 "Zbrodnia i kara" 100 "Lesio" 50 Wynikiem są tytuły: "Potop", "Zemsta", "Zbrodnia i kara", ponieważ 100 i 90 są dwiema najwyższymi cenami. Tytuł książki wraz z ceną powinny się znaleźć w tabeli Wiad. Zad. 3 (NA KOPII TABELI Ksiazka) Stworzyć blok PL/SQL zwiększający cenę książki o 5% zaczynając od książek najtańszych i zgodnie z kolejnością alfabetyczna tytułów. Przykład: id_ksiazki tytul cena 1 A 10 2 B 28 3 C 10 4 D 30 Kolejność sprawdzania cen (id_ksiazki): 1, 3, 2, 4 Jeśli suma cen wszystkich książek (po podwyżce i przed podwyżką) przekroczy podaną przez użytkownika granicę, to cena żadnej innej książki nie powinna ulec zmianie. Zad. 4 Stworzyć blok PL/SQL, który sprawdzi tytuły książek najczęściej i najrzadziej zamawianych. Informacje o tytułach i ilościach zamówień powinny znaleźć się w tabeli Wiad. (Zadanie powinno zostać rozwiązane przy użyciu kursorów jawnych). Zad. 5 Stworzyć blok PL/SQL, który wypisze informacje dotyczące danej książki w zależności od ilości rozdziałów w tej książce: a) ilość rozdziałów mniejsza od średniej ilości rozdziałów (całkowitej części średniej), b) ilość rozdziałów równa średniej ilości rozdziałów (całkowitej części średniej), c) ilość rozdziałów większa od średniej ilości rozdziałów (całkowitej części średniej). Zad. 6 Stworzyć tabelę Wiad2 z pięcioma kolumnami numerycznymi, przy czym pierwsza kolumna stanowi klucz główny. Wstawić do niej wiersze postaci: nr_przedziału_cenowego cena_od cena_do ilosc_stron_od ilosc_stron_do Użytkownik podaje na ile przedziałów cenowych (książek) mamy rozbić. Należy wyznaczyć: dla atrybutu cena równe przedziały, wartości dla kolumn odpowiadających ilościom stron i wstawić wyznaczone wartości do tabeli Wiad2. POMOC 1. Tworzenie tabel CREATE TABLE N_TABELI AS WYR_SELECT; 2. Wstawianie wierszy INSERT INTO N_TABELI (LISTA KOLUMN) (WYR_SELECT); 3. Bloki PL/SQL anonimowe [ DECLARE n_zmiennej typ_danych;....... ] BEGIN END; instrukcje; [ EXCEPTION obsluga wyjatkow ] Aby wykonać instrukcje zawarte w bloku należy wcisnąć znak '/' i ENTER n_zmiennej n_tabeli.n_kolumny%type; n_zmiennej n_tabeli%rowtype; 4. Instrukcja SELECT INTO SELECT n_kolumn INTO n_zmiennych FROM n_tabeli.......... Wyrażenie SELECT INTO zwraca jeden wiersz! Lista zmiennych: zmienne po przecinkach SELECT INTO pobiera wartości i wstawia pod zmienne. 5. Kursor Skupia wiele wierszy wybranych na podstawie jakiegoś WYR_SELECT (zapytania), różny od polecenia SELECT INTO ze względu właśnie na tę ilość wierszy: różną od 1. a) jawny Deklaracja CURSOR n_kursora (parametry) IS WYR_SELECT; (w sekcji deklaracyjnej bloku) Otwieranie kursora OPEN n_kursora(parametry); Pobieranie danych z kursora FETCH n_kursora INTO zmienna (zmienne); Zamykanie kursora CLOSE n_kursora; Pętla kursorowa FOR i IN n_kursora LOOP ..... END LOOP; - w tym przypadku nie trzeba poleceń OPEN, FETCH, CLOSE; FOR otwiera i później zamyka kursor; FETCH niepotrzebne, bo pod zmienną i automatycznie podstawiane są wyniki zapytania. b) niejawny FOR i IN (WYR_SELECT) LOOP instrukcje; END LOOP; Pobranie wartości: i.(nazwa kolumny wybranej w WYR_SELECT) Zmiennej i nie trzeba deklarować. 6. Wypisywanie komunikatów dbms_output.put_line ('komunikat'); np.dbms_output.put_line ('Ksiazka '||i.tytul||' kosztuje '||i.cena); Aby było to możliwe należy wykonać następujące polecenie: set serveroutput on; 7. Instrukcje warunkowe IF warunek THEN instr ELSIF warunek THEN instr .... ELSE instr END IF; 8. Pętle LOOP instr END LOOP; WHILE war LOOP instr END LOOP; FOR i IN [REVERSE] min..max LOOP instr END LOOP; EXIT- bezwarunkowe wyjście z pętli EXIT WHEN- warunkowe 9. Pobranie wartości od użytkownika ¶metr: użytkownik poproszony zostanie o podanie wartości dla parametr &¶metr: j.w., ale podana wartość zostanie zapamiętana (parametr będzie miał określoną wartość do momentu rozłączenia)