1 / 11

PL/SQL

PL/SQL. Zajęcia nr III. Instrukcje SQL w PL/SQL. Instrukcje języka SQL są w PL/SQL są analogiczne do oferowanych przez RDBMS Instrukcje dzielą się na związane z kursorami (SELECT + DML) oraz sterowaniem transakcjami (COMMIT, ROLLBACK, SET TRANSACTION, LOCK TABLE, SAVEPOINT)

gypsy
Download Presentation

PL/SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PL/SQL Zajęcia nr III M. Rakowski - WSISiZ

  2. Instrukcje SQL w PL/SQL • Instrukcje języka SQL są w PL/SQL są analogiczne do oferowanych przez RDBMS Instrukcje dzielą się na związane z kursorami (SELECT + DML) oraz sterowaniem transakcjami (COMMIT, ROLLBACK, SET TRANSACTION, LOCK TABLE, SAVEPOINT) • Kursory dzielą się na jawne (deklarowane przez użytkownika) i niejawne – będące wywołaniami poleceń SQL (w prawie identycznej postaci) M. Rakowski - WSISiZ

  3. Kursor Wykonaniu instrukcji SQL w RDBMS towarzyszy zaalokowanie prywatnego obszaru roboczego, który jest buforem wykonania instrukcji i stanowi udostępnienie danych pobieranych lub informacji o realizacji instrukcji. Kursor, deklarowany w PL/SQL, jest zmienną, którą można kojarzyć ze zdaniem SQL – instrukcją PL/SQL. M. Rakowski - WSISiZ

  4. Atrybuty kursora Przetwarzaniu wierszy przez kursor (jawny lub nie) przez towarzyszą atrybuty, którym nadawane są odpowiednie wartości • kursor%FOUND - zawiera wartość BOOLEAN czy zaczytano kolejny wiersz • kursor%NOTFOUND - zawiera wartość BOOLEAN czy nie przechwycono wiersza • kursor%ISOPEN - zawiera wartość BOOLEAN czy kursor jest otwarty • kursor%ROWCOUNT – zawiera wartość NUMBER - liczba sprowadzonych wierszy W przypadku kursora niejawnego nazwą kursora jest „SQL” M. Rakowski - WSISiZ

  5. Kursory niejawne - wykorzystanie Wybór pojedynczych danych (SELECT z klauzulą INTO) Przykłady: -- przykład 2 DECLARE r_dept DEPT%ROWTYPE; n_deptno DEPT.deptno%TYPE := 10; BEGIN SELECT * INTO r_dept FROM DEPT WHERE deptno = n_deptno; DBMS_OUTPUT.PUT_LINE( r_dept.loc ||' - ' || r_dept.dname ); END; -- przykład 1 DECLARE v_ename EMP.ename%TYPE; n_sal EMP.SAL%TYPE := 5000; BEGIN SELECT ename INTO v_ename FROM EMP WHERE sal = n_sal; DBMS_OUTPUT.PUT_LINE( v_ename ); END; • Zadanie: • Wykonać przykład 1 z parameterem n_sal = 5000, a następnie z parametrem • n_sal = 3000 – ewentualne znalezienie większej ilości wierszy obsłużyć komunikatem – • „Znaleziono więcej niż jeden wiersz” • 2. Wykonać przykład 2 z parameterem n_deptno = 10, a następnie z parametrem • n_deptno = 50 – ewentualne nieznalezienie wierszy obsłużyć komunikatem – • „Nie znaleziono wiersza” M. Rakowski - WSISiZ

  6. Kursory niejawne – wykorzystanie cd. Polecenia DML -- przykład 3 DECLARE n_procent_podwyzki NUMBER := 10; BEGIN UPDATE NEW_EMP SET sal = sal + n_procent_podwyzki/100 * sal; DBMS_OUTPUT.PUT_LINE( 'Zmodyfikowano wierszy ' || SQL%ROWCOUNT ); END; • Zadanie • Stworzyć tabelę NEW_EMP na podstawie EMP • Wykonać kod z przykładu 3 • Zobaczyć zmiany • Wycofać zmiany • Zmodyfikować kod tak aby podnieść tylko osobom na stanowiskach ‘CLERK’ • Zobaczyć zmiany • Usunąć tabelę NEW_EMP M. Rakowski - WSISiZ

  7. Kursory jawne Służą do specyficznego przetwarzania większej ilości wierszy. Deklaracja kursorów jawnych odbywa się w sekcjiDECLARE Kursory mogą być otwierane instrukcją: OPEN kursor[(parametry)]; Przechwytywanie kolejnych wierszy może odbywać się instrukcją: FETCH kursor INTO zmienna[, zmienna..]* Kursory mogą być zamykane instrukcją: CLOSE kursor; W celu sprawdzania, czy przechwycenie kolenego wiersza powidło się należy używać atrybutu kursora: Kursor%FOUND lub Kursor%NOTFOUND M. Rakowski - WSISiZ

  8. Kursory jawne, wykorzystanie Postać kursorowa pętli FOR -- przykład 4 DECLARE CURSOR c_dept IS SELECT * FROM DEPT; r_dept DEPT%ROWTYPE; BEGIN FOR r_dept IN c_dept LOOP DBMS_OUTPUT.PUT_LINE( r_dept.deptno || ': ' || r_dept.loc || ' - ' || r_dept.dname ); END LOOP; END; -- przykład 5 BEGIN FOR r_dept IN ( SELECT * FROM DEPT ) LOOP DBMS_OUTPUT.PUT_LINE( r_dept.deptno || ': ' || r_dept.loc || ' - ' || r_dept.dname ); END LOOP; END; Zadanie: 1. Za pomocą pętli FOR wyświetlić nazwiska i zarobki wszystkich pracowników i na koniec wyświetlić „Najlepiej zarabia nazwisko bo kwotę” M. Rakowski - WSISiZ

  9. Jawna obsługa kursora -- przykład 6 DECLARE v_ename EMP.ename%TYPE; n_sal EMP.SAL%TYPE := 5000; CURSOR c IS SELECT ename FROM EMP WHERE sal = n_sal; BEGIN OPEN c; FETCH c INTO v_ename; CLOSE c; DBMS_OUTPUT.PUT_LINE( v_ename ); END; Zadanie • Wykonać kod z przykładu 6. • Zmienić inicjację n_sal na 6000. • Czy obsługa nieznalezienia wiersza jest lepsza niż w SELECT? • Wyświetlić nazwiska i pensje pracowników bez użycia pętli FOR. M. Rakowski - WSISiZ

  10. Parametry kursorów jawnych Kursory, w celu ich wielokrotnego użycia w bloku PL/SQL, są parametryzowalne: Format parametru kursora w deklaracji: CURSOR kursor[( zmienna TYP [DEFAULT wartość domyślna] [, zmienna TYP [DEFAULT wartość domyślna] ]* )] IS SELECT .. M. Rakowski - WSISiZ

  11. Parametry kursorów jawnych -- przykład 7 DECLARE v EMP.job%TYPE := 'CLERK'; CURSOR c( v_job EMP.job%TYPE DEFAULT v ) IS SELECT MAX( sal) FROM EMP WHERE job = v_job; n EMP.sal%TYPE; v_tekst varchar2(100) := 'największe zarobki na stanowisku ' ; BEGIN OPEN c; FETCH c INTO n; CLOSE c; DBMS_OUTPUT.PUT_LINE( v_tekst || v|| ' to ‘ || n ); v := 'MANAGER'; OPEN c( v ) ; FETCH c INTO n; CLOSE c; DBMS_OUTPUT.PUT_LINE( v_tekst || v|| ' to ‘ || n); END; M. Rakowski - WSISiZ

More Related