plsql III

background image

PL/SQL(3)

M. Rakowski - WSISiZ

1

PL/SQL

Zajęcia nr III

background image

PL/SQL(3)

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)

background image

PL/SQL(3)

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.

background image

PL/SQL(3)

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”

background image

PL/SQL(3)

M. Rakowski - WSISiZ

5

Kursory niejawne -

wykorzystanie

Wybór pojedynczych danych (SELECT z klauzulą INTO)

Przykłady:

-- 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;

-- 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;

Zadanie:
1. 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”

background image

PL/SQL(3)

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
1. Stworzyć tabelę NEW_EMP na podstawie EMP
2. Wykonać kod z przykładu 3
3. Zobaczyć zmiany
4. Wycofać zmiany
5. Zmodyfikować kod tak aby podnieść tylko osobom na stanowiskach ‘CLERK’
6. Zobaczyć zmiany
7. Usunąć tabelę NEW_EMP

background image

PL/SQL(3)

M. Rakowski - WSISiZ

7

Kursory jawne

Służą do specyficznego przetwarzania większej ilości wierszy.
Deklaracja kursorów jawnych odbywa się w sekcji

DECLARE

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

background image

PL/SQL(3)

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ę

background image

PL/SQL(3)

M. Rakowski - WSISiZ

9

Jawna obsługa kursora

Zadanie
1.

Wykonać kod z przykładu 6.

2.

Zmienić inicjację n_sal na 6000.

3.

Czy obsługa nieznalezienia wiersza jest lepsza niż w SELECT?

4.

Wyświetlić nazwiska i pensje pracowników bez użycia pętli FOR.

-- 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;

background image

PL/SQL(3)

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 ..

background image

PL/SQL(3)

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;


Document Outline


Wyszukiwarka

Podobne podstrony:
5 2 PLSQL-Basic, WAT, semestr III, Bazy danych
3 tydzień Wielkanocy, III piątek
Jezus III
TBL WYKŁAD III Freud
Zaj III Karta statystyczna NOT st
TT Sem III 14 03
Metamorfizm Plutonizm III (migmatyty)
Cz III Ubezpieczenia osobowe i majątkowe
III WWL DIAGN LAB CHORÓB NEREK i DRÓG MOCZ
download Finanse międzynarodowe FINANSE MIĘDZYNARODOWE WSZiM ROK III SPEC ZF
w 13 III rok VI sem
wykład III Ubezpieczenia na życie2011
III BB
wykład III pns psychopatologia

więcej podobnych podstron