Kursory jawne, procedury, funkcje
Transkrypt
Kursory jawne, procedury, funkcje
Studia dzienne Systemy przetwarzania i baz danych II Pracownia specjalistyczna nr 4 Temat: Kursory jawne, procedury, funkcje Zad 1 Stworzy blok PL/SQL zwi kszaj cy cen ksi ki o 5% zaczynaj c od ksi ek najta szych i zgodnie z kolejno ci alfabetyczn tytułów (operujemy na tabeli ksi zka_tmp, b d cej kopi tabeli t_ksiazka) 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 przekroczy 135, ko czymy zwi kszanie cen ksi ek. Zad 2 Stworzy blok PL/SQL, który sprawdzi tytuł najdro szej i najta szej ksi ki. Informacje o tytułach i cenach powinny znale si w tabeli Komunikat (zadanie powinno zosta rozwi zane przy u yciu kursorów jawnych). Zad 3 Napisa funkcj , która zwróci warto reprezentuj c procent zamówie , które s realizowane kart kredytow . Zad 4 Napisa funkcj , która zwróci całkowit warto danego zamówienia (numer zamówienia powinien stanowi parametr wej ciowy funkcji). Zad 5 Napisa procedur , która usunie z tabeli Komunikat wszystkie te rekordy, które zawieraj co najmniej jedn warto NULL. Zad 6 Napisa procedur , która sprawdzi, jaka ksi ka była najbardziej popularna w ród kupuj cych, tzn. nale y sprawdzi jaki tytuł najcz ciej si pojawia w ród zamawianych ksi ek. Procedura powinna doda do tabeli komunikat tytuł tej ksi ki i ilo sprzedanych ksi ek o tym tytule. Pomoc Kursor 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; lub FOR i IN n_kursora LOOP ..... END LOOP; - w tym przypadku nie trzeba polecen OPEN, FETCH, CLOSE; FOR otwiera i pozniej zamyka kursor; FETCH niepotrzebne - pod zmienna „i” automatycznie podstawiane sa wyniki zapytania Atrybuty kursora jawnego %ISOPEN – atrybut logiczny, który przyjmuje warto TRUE, je li kursor jest otwarty %NOTFOUND - atrybut logiczny, który przyjmuje warto TRUE, je li ostatnia instruncja FETCH nie zwróciła adnego wiersza %FOUND – odwrotno %NOTFOUND %ROWCOUNT – atryut numeryczny, który zwraca liczb wierszy sprowadzonycdo tego momentu Wypisywanie komunikatów 1. SET SERVEROUTPUT ON; 2. DBMS_OUTPUT.PUT_LINE(‘Komunikat’); 3. DBMS_OUTPUT.NEW_LINE; -przej cie do nowej linii Deklaracja funkcji CREATE [OR REPLACE] FUNCTION n_funkcji[(parametry)] RETURN typ_danych IS [DEKLARACJE] BEGIN INSTRUKCJE [EXCEPTION obsługa wyj tków] END [nazwa funkcji]; Deklaracja procedury CREATE [OR REPLACE] PROCEDURE n_procedury[(parametry)] IS [DEKLARACJE] BEGIN INSTRUKCJE [EXCEPTION obsługa wyj tków] END [nazwa procedury]; Parametry nazwa [IN | OUT | IN OUT] typ_danych [ {:= | DEFAULT} wyra enie] IN- jedynie przekazanie warto ci do programu (nie mo na zmienia ) domy lnie OUT- warto parametru jest (po prawidłowym wykonaniu podprogramu) zwracana do jednostki wołaj cej; uwaga: próba odwołania si do parametru (w podprogramie) przed przypisaniem: bł d; niezainicjalizowana zmienna IN OUT- mo liwe jest przekazywanie warto ci do podprogramu i zwracanie warto ci do wołaj cej jednostki Sprawdzanie bł dów SHOW ERRORS; SELECT * FROM user_errors; Tworzenie zmiennych globalnych VARIABLE n_zmiennej typ_zmiennej; PRINT n_zmiennej; //wy wietlenie wartosci zmiennej :n_zmiennej := warto ; //przypisanie warto ci Uruchamianie funkcji i procedur EXECUTE zmienna := nazwa_funkcji [(lista argumentów)] EXECUTE nazwa_procedury [(lista argumentów)] Instrukcja IF IF warunek THEN instrukcje ELSIF warunek THEN instrukcje .... ELSE instrukcje END IF; P tle LOOP instrukcje END LOOP; WHILE warunek LOOP instrukcje END LOOP; FOR i IN [REVERSE] min..max LOOP instrukcje END LOOP; EXIT- bezwarunkowe wyj cie z p tli EXIT WHEN – warunkowe wyj cie z p tli Pobranie warto ci od u ytkownika - ¶metr (‘¶metr’- zmienna znakowa): 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)