Professional Documents
Culture Documents
Chapter 6
Chapter 6
160
v/;k;&6
iafDr;ksa dh ml la[;k dks ifj.kkeLo:i nsrk gS tks fd Insert, Update ;k Delete ds pyk,
tkus ij Hkkfor gksus okyh gS vFkok ,d ykbu dh Select LVsVesUV ds }kjk ifj.kkeLo:i vkus
okyh gS A
161
mnkgj.k &
SQL> declare
2
result number;
3
vempno number;
4
vsal number;
5
begin
6
SELECT empno, sal into vempno, vsal FROM employee
7
WHERE sal = (SELECT MIN (sal) FROM employee);
8
result := SQL%ROWCOUNT;
9
if result>= 1 then
10
dbms_output.put_line (vempno | | | | vsal);
11
end if ;
12
end ;
13
/
7369 1300
PL/SQL procedure successfully completed.
mijksDr mnkgj.k esa geus SQL%ROWCOUNT Attribute dk ;ksx nkkZ;k gS A bl
mnkgj.k esa geus Number MsVkdkj ds rhu ifjorZukad result, vempno rFkk vsal ?kksfkr fd, gSA
blds ckn PL/SQL CYkkWd ds Begin Hkkx esa ,d Select LVsVesUV ds }kjk Employee Vsfcy ds mu
deZpkfj;ksa ds empno rFkk sal dkWye ds eku dks ifjorZukad vempno rFkk vsal esa lafpr djus dh
ekax dh xbZ gS A bl ekax esa Where krZ esa ,d mi&ekax dh xbZ gS fd sal dkWye dk eku Employee
Vsfcy ds Sal dkWye esa fLFkr U;wure gksuk pkfg, A blds ckn result ifjorZukad esa mi;qZDr ekax ds
ifj.kke SQL%ROWCOUNT Attribute ds cjkcj fd;k x;k gS A
vc if frcU/k dk ;ksx djds ;g tkapk x;k gS fd ;fn result ifjorZukad dk eku 1 vFkkZr
mijksDr Select LVsVesUV ifj.kke ds :i esa dsoy ,d iafDr gh ykSVkrk gS] rks dbms_output.put_line()
QaDku ds }kjk ifjorZukad vempno rFkk vsal ds eku dks ekWuhVj Lhu ij nfkZr djs A
SQL%FOUND
bl Attribute dk ewY;kadu lR; esa rc gksrk gS] tc ;fn ,d Insert, Update vFkok Delete
LVsVesUV ,d vFkok ,d ls vf/kd iafDr;ksa dks Hkkfor djrk gS A ;fn bu LVsVesUV~l ls dksbZ Hkh
iafDr Hkkfor ugha gksrh gS] rks bldk ewY;kadu vlR; (False) gksrk gS A
mnkgj.k &
SQL> SELECT sal FROM employee;
SAL
-------------1300
7000
bUQkZsesfVDl iszfDVlsl
7000
2975
7000
2850
2450
3000
5000
7000
1600
3050
3000
1800
14 rows selected.
SQL> DECLARE
2
var BOOLEAN;
3
BEGIN
4
UPDATE employee SET sal=sal-1000;
5
var :=SQL%FOUND;
6
if var then
7
dbms_output.put_line ( change made);
8
end if;
9
end;
10
/
Change made
PL/SQL procedure successfully completed.
SQL> SELECT sal FROM employee;
SAL
-----------300
6000
6000
1975
6000
1850
1450
2000
4000
6000
162
163
600
2050
2000
800
14 rows selected.
iafDr Hkkfor ugha gksrh gS A ;fn bu LVsVesUV~l dh dksbZ Hkh ,d iafDr Hkkfor gksrh gS] rks bldk
ewY;kadu vlR; (False) gksrk gS A
mnkgj.k &
SQL> BEGIN
2
UPDATE employee SET sal=sal + (0.2*(sal)) WHERE sal > &sal;
3
if SQL%FOUND then
4
dbms_output.put_line (No. of record update= | | SQL%ROWCOUNT);
5
end if;
6
if SQL%NOTFOUND then
7
dbms_output.put_line (No record update);
8
end if;
9
end;
10
/
Enter value for sal:6000
old
2 : update employee set sal + (0.2 * (sal)) where sal > &sal;
bUQkZsesfVDl iszfDVlsl
164
new 2 : update employee set sal + (0.2 * (sal) where sal > 6000;
No. of records update = 4
PL/SQL procedure successfully completed.
SQL>rollback;
Rollback complete.
SQL>BEGIN
2
Update employee SET sal = sal + (0.2 * (sal)) WHERE sal > &sal;
3
if SQL%FOUND then
4
dbms_output.put_line (No. of records update = | | SQL%ROWCOUNT);
5
end if;
6
if SQL%NOT FOUND then
7
dbms_output.put_line (No records updated);
8
end if;
9
end;
10
/
Enter value for sal : 7000
old
2 : update employee set sal = sal + (0.2 * (sal)) where sal > &sal;
new 2 : update employee set sal = sal + (0.2 * (sal)) where sal > 7000;
No. records updated
PL/SQL procedure successfully completed.
fiNys mnkgj.k esa geus rhuksa Attributes SQL%ROWCOUNT, SQL%FOUND rFkk
SQL%NOTFOUND dk ;ksx nkkZ;k gS A bl mnkgj.k eas geus PL/SQL CykWd ds Begin Hkkx
eas ,d Update LVsVesUV ds }kjk Employee Vsfcy ds mu deZpkfj;ksa ds sal dkWye ds eku esa 20
frkr dh o`f) fu/kkZfjr dh gS] ftuds sal dkWye dk eku ;ksxdrkZ }kjk fo"V fd, x, eku ls
vf/kd gS A vc if frcU/k dk ;ksx djds Attribute dks tkapk x;k gS fd ;fn ;g SQL%FOUND
Attribute gS] rks dbms_output.put_line QaDku dh lgk;rk ls ekWuhVj Lhu ij lUnsk No. of
record is update = ds lkFk Attribute SQL%ROWCOUNT dk eku nfkZr gks A blds ckn ,d
vU; if frcU/k dk ;ksx djds Attribute dks tkapk x;k gS fd ;fn ;g SQL%NOTFOUND
Attribute gS] rks dbms_output.put_line QaDku dh lgk;rk ls ekWuhVj Lhu ij lUnsk No records
updated nfkZr gksA
bl mnkgj.k eas geus bl ksxzke dks nks ckj pyk;k gS A igyh ckj geus sal dkWye ds fy,
eku 6000 fo"V fd;k gS A ;g eku Employee Vsfcy ds sal dkWye eas fLFkr ekuksa esa lcls cM+k eku
ugha gS] blls vf/kd eku ftl&ftl iafDr eas gS] ml iafDr ds sal dkWye ds eku esa ml eku ds 20%
165
dh o`f) gks tkrh gS A ;g o`f) fdruh iafDr;ksa eas gksrh gS] bldh x.kuk SQL%ROWCOUNT
Attribute eas gksrh gS vkSj ekWuhVj Lhu ij No. of records update=4 lUnsk nfkZr gksrk gS A
blds ckn eas bl ksxzke }kj fd, x, ifjorZuksa dks fujLr djus ds fy, Rollback dek.M dk
;ksx fd;k gSA
igyh ckj geus sal dkWye ds fy, eku 7000 fo"V fd;k gS A ;g eku Employee Vsfcy ds
sal dkWye esa fLFkr ekuksa eas lcls cM+k eku gS] vc bl ksxkz e dks blls vf/kd eku dh dksbZ Hkh iafDr
ugha kIr gksrh gS vFkkZr~ Update LVsVesUV ds ifj.kke dk Attribute SQL%NOTFOUND gksrk gS
vkSj ekWuhVj Lhu ij No records updated nfkZr gksrk gS A
dlZj Attributes ds eku geskk gh lcls vUr esa pykbZ xbZ SQL LVsVesUV Hkys gh og fdlh Hkh
LFkku ij fLFkr gks] ds ekuksa dk lUnHkZ xzg.k djrs gSa A ;g SQL LVsVesUV fdlh vU; Scope vFkkZr~
fdlh mi&CykWd esa Hkh fLFkr gks ldrs gS A vr% ;fn ge bu Attribute ekuksa dks vkxs ;ksx esa yk,
tkus ds fy, lqjf{kr j[kuk pkgrs gS] rks bls ,d Boolean MsVkdkj ds ifjorZukad dks lkSai nsuk
pkfg, vFkkZr~ Assign dj nsuk pkfg,A
mnkgj.k &
SQL> BEGIN
2
sqlfound1 BOOLEAN;
3
sqlrowcnt1 NUMBER;
4
sqlfound2 BOOLEAN;
5
sqlrowcnt2 NUMBER;
6
BEGIN
7
DELETE FROM employee WHERE comm=&comm;
8
sqlfound1 := SQL%FOUND;
9
sqlrowcnt1 := SQL%ROWCOUNT;
10
UPDATE employee SET ename=upper (ename);
11
sqlfound2 := SQL%FOUND;
12
sqlrowcnt2 := SQL%ROWCOUNT;
13
if sql found1 then
14
dbms_output.put_line (No. of record deleted = | | sqlrowcnt1);
15
end if;
16
if sql found2 then
17
dbms_output.put_line (No. of record updated = | | sqlrowcnt2);
18
end if;
19
end;
20
/
Enter value for comm : 0
old
7 : delete from employee where comm= &comm;
new 7 : delete from employee where comm=0;
bUQkZsesfVDl iszfDVlsl
166
fiNys mnkgj.k esa geus dlZj Attributes dk ;ksx mudks ifjorZukadksa dks lkSaidj vU; LFkku
ij djuk nkkZ;k gS A bl mnkgj.k esa nks Boolean MsVkdkj ds ifjorZukad sqlfound1 rFkk
sqlfound2 vkSj nks Number MsVkdkj ds ifjorZukad sqlrowcnt1 rFkk sqlrowcnt2 ?kksf"kr fd, gSA
bl mnkgj.k ds okys Begin Hkkx eas igys Delete LVsVesUV dk ;ksx djds Employee Vsfcy
dh mu iafDr;ksa dks feVk;k x;k gS] ftuds comm dkWye dk eku] ;ksxdrkZ }kjk fo"V fd, x,
eku ds cjkcj gSA bl LVsVesUV ds dk;kZUo;u ds ifj.kke ds eku dks Boolean MsVkdkj ds
ifjorZukad sqlfound1 rFkk ftruh iafDr;ka bl LVsVesUV ds dk;kZUo;u ls feVh gS] mudh la[;k dks
Number MsVkdkj ds ifjorZukad dks sqlrowcnt1 lkSai fn;k gS A
blds ckn update LVsVesUV dk ;ksx djds Employee Vsfcy dh lHkh iafDr;ksa ds ename
dkWye eas fLFkr Charactertype ekuksa dks Upper Case eas ifjofrZr fd;k x;k gS A bl LVsVesUV ds
dk;kZUo;u ds ifj.kke ds eku dks Boolean MsVkdkj ds ifjorZukad sqlfound2 rFkk ftruh iafDr;ka
bl LVsVesUV ds dk;kZUo;u ls feVh gS] mudh la[;k dks Number MsVkdkj ds ifjorZukad dks
sqlrowcnt2 lkSai fn;k gS A
vc ,d if frcU/k ds }kjk ifjorZukad sqlfound1 ds eku dks tkapk x;k gS vkSj ekWuhVj Lhu
ij dbms_output.put_line QaDku dh lgk;rk ls lUnsk No. of records deleted = ds lkFk
ifjorZukad sqlrowcnt1 dk eku nfkZr fd;k x;k gS A
,d vU; if frcU/k ds }kjk ifjorZukad sqlfound2 ds eku dks tkapk x;k gS vkSj ekWuhVj Lhu
ij dbms_output.put_line QaDku dh lgk;rk ls lUnsk No. of records upddated = ds lkFk
ifjorZukad sqlrowcnt2 dk eku nfkZr fd;k x;k gS A
R;{k dlZj (Explicit Cursors)
R;{k dlZj vksjsdy }kjk ;ksx esa yk, tkus okyk ,slk dke djus okyk LFkku (Work Area)
gksrk gS] tks fd ,d ls vf/kd iafDr;ksa eas dh xbZ ekaxksa dks ifjpkfyr (Handle) djus ds dke vkrk
gS] ;g orZeku eas foysf"kr (Process) dh tkus okyh iafDr ds ckjs esa Hkh crkrk gS vFkkZr~ orZeku le;
esa fdl iafDr esa dke fd;k tk jgk gS] ;g Hkh crkrk gSA
,d ekax }kjk ifj.kke ds :i esa kqU;] ,d vFkok ,d ls vf/kd iafDr;ka Hkh ykSVk ldrh gSA
ifj.kke ds :i esa kIr iafDr;ksa dh la[;k ekax esa ;ksx fd, x, frcU/k ij fuHkZj djrh gS A
tc ,d ekax ifj.kke ds :i eas ,d ls vf/kd iafDr;ksa dks ykSVkrh gS] rks ,d dlZj dks R;{k
:i ls fuEukuqlkj ifjHkkf"kr fd;k tk ldrk gS &
& ekax }kjk ifj.kke ds :i esa nh xbZ igyh iafDr ls vkxs foysf"kr djuk A
& bl ckr ij utj j[kuk] fd orZeku esa dkSu&lh iafDr foysf"kr dh tk jgh gS A
167
dlZj dks PL/SQL CykWd ds declare okys Hkkx esa ifjHkkf"kr fd;k tkrk gS] lkFk gh bldks ,d
uke nsrs gq, ,d ekax ds lkFk Hkh tksM+k tkrk gS A dlZj dks fuEufyf[kr lw=kuqlkj ifjHkkf"kr fd;k
tkrk gS &
lw= &
CURSOR Cursor_Name IS Select_Statement
dlZj (Cursor) dks ifjpkfyr djus ds fy, fuEufyf[kr rhu LVsVesUV~l dk ;ksx fd;k
tkrk gS A
& Open
& Fetch
& Close
dlZj dks Open LVsVesUV dh lgk;rk ls ,d kjfEHkd eku nsuk vko;d gksrk gS A ,d Fetch
Statement dh lgk;rk ls dlZj dh orZeku iafDr dks iqu% kIr djus ds fy, fd;k tkrk gS A Fetch
LVsVesUV dks ckj&ckj rc rd pyk;k tk ldrk gS] tc rd fd lHkh iafDr;ksa dks iqu% kIr ugha dj
fy;k tkrk A dlZj ls lEc) ekax }kjk ykSVk, x, R;sd dkWye ds eku ds fy, Into ds ckn nh
tkus okyh lwph (List) ds vUnj ek% :i esa ifjorZukad gksus pkfg, lkFk gh lkFk mu ifjorZukadks
dk MsVkdkj Hkh dkWye ds MsVkdkj ds leku gh gksuk pkfg, A bl LVsVesUV dk ;ksx fuEu
k:ikuqlkj fd;k tkrk gS A
FETCH Cursor_Name INTO var1, var2..........
PL/SQL eas ,slk lEHko ugha gS fd igys fdlh ifjorZukad] dlZj vkfn dk ;ksx dj fy;k tk,
rFkk mldh ?kks"k.kk ckn esa dh tk,] vr% dlZj dks Hkh Open, Fetch rFkk Close LVsVesUV pykus ls
DECLARE
vempno employee.empno%type;
vename employee.ename%type;
CURSOR cl IS
SELECT empno, ename FROM employee;
BEGIN
OPEN cl;
FETHC cl INTO vempno, vename;
dbms_output.put_line (vempno || || vename);
CLOSE cl;
end;
/
bUQkZsesfVDl iszfDVlsl
168
7369 SANJEEV
PL/SQL procedure successfully completed.
tc vfUre iafDr dks Hkh foysf"kr dj fy;k tkrk gS] rks dlZj dks Close LVsVesUV ds }kjk cUn
dj fn;k tkrk gS A bl LVsVesUV dk ;ksx fuEu k:ikuqlkj fd;k tkrk gS &
CLOSE Cursor_Name
fiNys fn;s x;s mnkgj.k esa geus ,d dlZj dks ifjHkkf"kr rFkk ifjpkfyr djuk nkkZ;k gS A
bl mnkgj.k esa geus igys nks ifjorZukad vempno rFkk vename ?kksf"kr fd, gS] bu ifjorZukadksa dk
MsVkdkj rFkk vkdkj Employee Vsfcy ds ek% empno o ename dkWye ds MsVkdkj rFkk vkdkj
ds leku gSA
blds ckn geus ,d dlZj ftldk uke C 1 j[kk x;k gS] ifjHkkf"kr fd;k gS rFkk blds lkFk
lEc) Select LVsVesUVesa Employee Vsfcy ds empno o ename dkWyEl ds lHkh fjdkWM~lZ dks nkkZus
dh ekax dh gSA
vc PL/SQL ds Begin okys Hkkx esa igys Open LVsVesUV dk ;ksx djds bl dlZj dks [kksyk
x;k gSA blds ckn Fetch LVsVesUV dk ;ksx djds dlZj ds lkFk lEc) ekax ds ifj.kkeLo:i kIr
iafDr;ksa esa ls igyh iafDr ds empno rFkk ename dkWyEl ds ekuksa dks ifjorZukad vempno rFkk
vename esa lafpr djk;k gSA blds mijkUr dbms_output.put_line QaDku dk ;ksx djds bu
ifjorZukadksa ds ekuksa dks ekWuhVj Lhu ij nfkZr fd;k x;k gSA
bl ksxzke ds pyus ij ekWuhVj Lhu ij Employee Vsfcy dh igyh iafDr ds empno dkWye
dk eku 7369 rFkk ename dkWye dk eku SANJEEV gh nfkZr gksrk gS A
Fetch LVsVesUV ,d le; esa orZeku lh; iafDr;ksa ds lewg esa ls dsoy ,d iafDr dks gh iqu%
kIr djrk gS A ;fn Fetch LVsVesUV dks fdlh ywi eas ;ksx fd;k tk,] rks R;sd ckj bl LVsVesUV
ds dk;kZfUor gksus ij ;g LVsVesUV orZeku lf; iafDr;ksa ds lewg esa ls vxyh iafDr ij pyk
tkrk gS A
vxys mnkgj.k esa geus Fetch LVsVesUV dk ;ksx ,d ywi ds vUnj fd;k gS A ;g mnkgj.k
fiNys mnkgj.k dk gh lq/kjk gqvk :i gSA bl mnkgj.k eas geus dlZj C1 dks Open LVsVesUV ls
[kksyus ds mijkUr ,d for ywi dk ;ksx djds Fetch LVsVesUV dks ikap ckj pyk;k gS A
bl ksxzke ds pyus ij gesa ekWuhVj Lhu ij Employee Vsfcy dh igyh ikap iafDr;ksa ds
empno dkWye rFkk ename dkWye ds eku nfkZr gksrs gS A ,slk blfy, gksrk gS] D;ksafd igyh ckj
Fetch LVsVesUV ds dk;kZfUor gksus ij ekWuhVj Lhu ij Employee Vsfcy dh igyh iafDr ds empno
dkWye rFkk ename dkWye dk eku nfZkZr gksrk gSA
mnkgj.k &
SQL>
2
3
4
DECLARE
vempno employee.empno%Type;
vename employee.ename%Type;
CURSOR cl IS
169
5
SELECT empno, ename FROM employee;
6
BEGIN
7
OPEN cl;
8
FOR I in 1..5 LOOP
9
FETHC cl INTO vempno, vename;
10
dbms_output.put_line (vempno || || vename);
11
END LOOP;
12
CLOSE Cl;
13
end;
14
/
7369 SANJEEV
7499 AMIT
7521 SUDHANSHU
7566 SANDEEP
7654 REKHA
PL/SQL procedure successfully completed.
vc ksxkz e bl LVsVesUV dks iqu% dk;kZfUor djrk gS] bl ckj dk;kZfUor gksus ij ekWuhVj Lhu
ij Employee Vsfcy dh nwljh iafDr ds empno dkWye rFkk ename dkWye dk eku nfkZr gksrk
gS A blh dkj ikapoh ckj dk;kZfUor gksus ij Employee Vsfcy dh ikapoh iafDr ds ename dkWye
rFkk ename dkWye dk eku nfkZr gksrk gS A
dlZj dks ?kksf"kr djus ds fy, ;ksx dh xbZ ekax esa PL/SQL ifjorZukadksa dks dsoy vius
Scope ds vUnj gh lUnfHkZr fd;k tk ldrk gS A ekax dh Where krZ ds lkFk ;ksx fd, x,
ifjorZukad rHkh lf; gks ikrs gSa] tcfd dlZj dks Open LVsVesUV ds }kjk igys [kksyk tk, A
fn, x, mnkgj.k esa geus ,d dlZj dks ?kksf"kr djus ds fy, ;ksx dh xbZ ekax eas PL/SQL
ifjorZukadksa dk ;ksx djuk nkkZ;k gS A bl mnkgj.k esa geus igys nks ifjorZukad vempno, vename
rFkk vsal ?kksf"kr fd, gS] bu ifjorZukadksa dk MsVkdkj rFkk vkdkj Employee Vsfcy ds ek%
empno, ename rFkk sal dkWye ds MsVkdkj rFkk vkdkj ds leku gS A ifjorZukad vsal dks bls
?kksf"kr djus ds lkFk&lkFk kjfEHkd eku 3000 Hkh nku dj fn;k x;k gS A blds ckn dlZj c1
dks ifjHkkf"kr djrs le; blls lEc) ekax esa Where krZ dk ;ksx djrs gq, Employee Vsfcy dh
mu iafDr;ksa ds empno, ename rFkk sal dkWye ds ekuksa dks pquus ds fy, dgk x;k gS] ftuds sal
dkWye eas Pl/SQL ifjorZukad vsal dkWye ds kjfEHkd eku 3000 ls vf/kd gksA
mnkgj.k &
SQL>
2
3
4
5
DECLARE
vempno employee.empno%type;
vename employee.ename%type;
vsal employee.sal%type :=3000;
CURSOR c1 IS
bUQkZsesfVDl iszfDVlsl
6
7
8
9
10
11
12
13
14
15
7499
7521
7654
7839
170
;fn vfUre Fetch LVsVesUV lQy gksrk gS] D;ksfa d vHkh de ls de ,d iafDr ks"k gS] rks bldk
ewY;kadu lR; eas gksrk gS vkSj ;fn vfUre Fetch LVsVesUV vlQy gksrk gS] D;ksafd vc dksbZ Hkh iafDr
ugha ksk gS] rks bldk ewY;kadu vlR; eas gksrk gS A
mnkgj.k &
SQL>
2
3
4
5
6
7
8
9
10
11
DECLARE
vempno employee.empno%type;
vename employee.ename%type;
vsal employee.sal%type;
vdeptno employee.deptno%type;
FLAG NUMBER : =1;
CURSOR c1 IS
SELECT empno, ename, sal, deptno FROM employee WHERE sal>3000;
BEGIN
OPEN cl;
LOOP
171
vf/kd gks A
vc ,d ywi esa Fetch LVsVesUV ls dlZj ds lkFk lEc) ekax] ds ifj.kke ds :i eas kIr ekuksa
dks PL/SQL ifjorZukad vempno, vename, vsal rFkk vdeptno esa lafpr djk;k gS A blds ckn if
frcU/k dk ;ksx djds bl dlZj ds Attribute dks C1%FOUND ls tkapk x;k gS A ;fn ;g lR;
kIr gksrk gS] rks Fetch LVsVesUV }kjk PL/SQL ifjorZukadksa vempno, vename, vsal rFkk vdeptno
esa lafpr ekuksa dks t_emp Vsfcy esa Insert gks tk, rFkk dbms_output.put_line () QaDku ds dkj.k
bu ifjorZukadksa ds ekuksa dk nkZu ekWuhVj Lhu ij gks vkSj ;fn ;g vlR; gksrk gS] rks ksxzke dk
fu;U=.k ywi ls ckgj vk tk, A
bl ksxkz e ds dk;kZfUor gksus ij Employee Vsfcy ls N% iafDr;ka pqu yh tkrh gS vkSj mudks
t_emp uked Vsfcy eas Insert dj fn;k tkrk gS A ;fn PL/SQL ifjorZukad vsal dk kjfEHkd eku
7000 vFkok blls vf/kd fn;k gksrk] tks fd sal dkWye dk lcls vf/kd eku gS] rks ksxzke dk
fu;U=.k ywi ls ckgj vk tkrk gS] D;ksafd Employee Vsfcy eas ,slh dksbZ Hkh iafDr ugha gS] ftlds
sal dkWye dk eku 7000 vFkok blls vf/kd gks A bl fLFkfr eas Hkh dksbZ =qfV lUnsk ugha gksrk gS
vkSj Procedure lQyrkiwoZd iw.kZ gksrk gS A
bUQkZsesfVDl iszfDVlsl
172
%NOTFOUND
;g Attribute mi;qZDr %FOUND Attributes ds Bhd foifjr dk;Z djrk gS A ;fn vfUre
Fetch LVsVesUV vlQy gksrk gS] D;ksafd vc dksbZ Hkh iafDr ugha ks"k gS] rks bldk ewY;kadu lR; esa
gksrk gS vkSj ;fn vfUre Fetch LVsVesUV lQy gksrk gS] D;ksafd vHkh de ls de ,d iafDr ks"k gS]
rks bldk ewY;kadu vlR; eas gksrk gS A
vkxs fn;k x;k mnkgj.k eas fiNys mnkgj.k dk gh :i gS A bu nksuksa mnkgj.kksa eas vUrj ek=
bruk gh gS fd fiNys mnkgj.k esa dsoy ,d if frcU/k dk ;ksx fd;k x;k gS] tcfd bl mnkgj.k
esa geus nks if frcU/kksa dk ;ksx fd;k gS A bl mnkgj.k esa geus PL/SQL ifjorZukad vsal dk
kjfEHkd eku 7000 fn;k gS] tks fd sal dkWye dk lcls vf/kd eku gS A
mnkgj.k &
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
13
14
15
16
17
17
18
19
20
21
22
23
DECLARE
vempno employee.empno%type;
vename employee.ename%type;
vsal employee.sal%type;
vdeptno employee.deptno%type;
FLAG NUMBER : =1;
CURSOR c1 IS
SELECT empno, ename, sal, deptno FROM employee WHERE sal>3000;
BEGIN
OPEN cl;
LOOP
FETHC cl INTO vempno, vename, vsal, vdeptno;
IF C1%FOUND THEN
INSERT INTO t_emp VALUES (VEMPNO, VENAME, VSAL, VDEPTNO);
dbms_output.put_line (vempno || || vename || || vsal || || vdeptno);
END IF;
IF C1%NOTFOUND THEN
EXIT;
END IF;
END LOOP;
CLOSE Cl;
END;
/
173
bl mnkgj.k esa igys if frcU/k eas dlZj C1 ds Attribute dks C1%FOUND ls tkapk x;k gSA
;fn ;g lR; kIr gksrk gS] rks Fetch LVsVesUV }kjk PL/SQL ifjorZukadksa vempno, vename rFkk
vdeptno esa lafpr ekuksa dks t_emp Vsfcy eas Insert gks tk, rFkk dbms_output.put_line () QaDku
ds dkj.k bu ifjorZukadksa ds ekuksa dk nkZu ekWuhVj Lhu ij gks A
bl mnkgj.k esa nwljs if frcU/k esa dlZj c1 ds Attribute dks C1%NOTFOUND ls tkapk
x;k gSA ;fn ;g lR; kIr gksrk gS] rks ksxzke dk fu;U=.k ywi ls ckgj vk tk, A
%ROWCOUNT :
;g Attribute Fetch LVsVesUV }kjk orZeku lf; iafDr;ksa ds lewg esa ;ksx esa ykbZ xbZ iafDr;ksa
dh la[;k dks eku ds :i esa ykSVkrk gS A eku yhft, Fetch LVsVesUV ds ifj.kkeLo:i gesa nks iafDr;ka
kIr gksrh gS] rks ;g Attribute 2 ykSVk;sxk A
mnkgj.k &
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
15
16
17
18
19
20
21
22
23
DECLARE
vempno employee.empno%type;
vename employee.ename%type;
vdname dept.dname%type;
vsal employee.sal%type;
vcomm employee.comm%type;
VNET NUMBER (7, 2);
CURSOR C1 IS
SELECT empno, ename, dname, sal, comm, sal+nvl (comm, 0)
FROM employee, dept WHERE employee.deptno=dept.deptno;
BEGIN
OPEN cl;
LOOP
FETCH cl INTO vempno, vename, vdname, vsal, vcomm, vnet;
IF C1%FOUND THEN
dbms_output.put_line (vempno || || vename || || vdname || || vsall ||
|| vcomm || || vnet);
END IF;
IF C1%NOTFOUND THEN
dbms_output.put_line (No. of Records Displayed : || C1%ROWCOUNT);
EXIT;
END IF;
END LOOP;
CLOSE Cl;
bUQkZsesfVDl iszfDVlsl
174
24
END;
25
/
7369 - SANJEEV - RESEARCH - 1300 - 1000 - 2300
7499 - AMIT - SALES - 7000- 300 - 7300
7521 - SUDHANSHU - SALES - 7000 - 500 - 7500
7566 - SANDEEP - RESEARCH - 2975 - 1000 - 3975
7654 - REKHA - SALES - 7000 - 1400 - 8400
7698 - POOJA - SALES - 2850 - 1000 - 3850
7782 - AMIT - ACCOUNTING - 2450 - 1000 - 3450
7788 - MUKESH - RESEARCH - 3000 - 1000 - 4000
7839 - RAKESH - ACCOUNTING - 5000 - 1000 - 6000
7844 - MEENU - SALES - 7000 - 0 - 7000
7876 - MEETU - RESEARCH - 1600 - 1000 - 2600
7900 - SUDHANSHU - SALES - 3050 - 1000 - 4050
7902 - SUSHEEL - RESEARCH - 3000 - 1000 - 4000
7934 - MADHU - ACCOUNTING - 1800 - 1000 - 2800
No. of Records Displayed : 14
PL/SQL procedure successfully completed.
ksxzke eas ;fn ,d R;{k dlZj [kqyk gqvk gS] rks bldk ewY;kadu lR; eas gksrk gS vkSj ;fn cUn
gS] rks bldk ewY;kadu vlR; esa gksrk gS A
175
MsVkcsl fVxlZ
MsVkcsl fVxlZ dk ifjp; (Introduction of Database Triggers)
MkVkcsl fVxlZ (Database Triggers) fdlh foks"k MsVkcsl Vsfcy ls tqM+h gqbZ PL/SQL dh ,d
lqjf{kr ksxzke bdkbZ gksrh gS A
;s lqjf{kr Procedures vFkok Functions ls fHkUu gksrs gS] D;ksafd Procedure vFkok Function
dks rks dk;kZfUor djus ds fy, R;{k :i ls dek.M ds }kjk cqyk;k tkrk gS] tcfd] tc Hkh dksbZ
MsVkcsl Vsfcy fdlh SQL vkWijsku ls Hkkfor gksrh gS] rks ;s Lor% gh vR;{k :i ls dk;kZfUor
gks tkrs gS A Vsfcy dk Hkkfor gksuk fdlh foks"k fLFkfr ij fuHkZj djrk gS A
MsVkcsl fVxlZ ds mi;ksx
MsVkcsl fVxlZ dk ;ksx fuEu dk;ksZa ds fy, fd;k tk ldrk gS &
& MsVk esa fd, x, lq/kkj dk ijh{k.k (Audit) djus ds fy, A
& MsVk dh lqj{kk (Security) djus ds fy, A
& ,dhr fu;U=.k Hkkoh djus ds fy, A
& dkWye ds ekuksa dks Lor% gh fudkyus ds fy, A
& nksgjkbZ tkus okyh VsfcYl dk vuqj{k.k (Maintainance) djus ds fy, A
,d MsVkcsl fVxlZ ds rhu Hkkx gksrs gS &
1- Triggerring Event fVxlZ ls ?kfVr gksus okyh ?kVuk
2- Optional Trigger Constraint oSdfYid fVxlZ frcU/k
3- Trigger Action fVxlZ dk dk;Z
tc dksbZ Event mifLFkr gksrh gS vFkok ?kVrh gS rc MsVkcsl fVxj py tkrk gS rFkk mlls
lEcfU/kr PL/SQL CykWd dk;Z dks iw.kZ djrk gS A
MsVkcsl fVxj (Database Trigger) mu foks"kkf/kdkjksa ds vuq:i dk;Z djrk gS tks mlds cukus
okys us igys gh ns j[ks gksrs gS u fd ;ksxdrkZ ds }kjk] tks fd mldks ,d Vsfcy ds }kjk ;ksx
eas yk jgk gS A vr% mlds cukus okys dks lgh&lgh mu lHkh Objects dh igqp gksuh pkfg, tks
Trigger ds Action ds }kjk lUnfHkZr fd, tk jgs gSa A
fdlh ,d nh xbZ Vsfcy ls vlhfer fVxlZ lEc) fd, vFkok tksM+s tk ldrs gSA ,d MsVkcsl
fVxj dks cukus ds fy, Create Trigger fu;e dk ikyu djuk gksrk gS vkSj mlds lkFk viuh fdlh
Vscy dks lEc) djuk gksrk gS vFkok lEc) Vsfcy ds fy, Alter fu;e dk ;ksx djuk gksrk gS A
,d MsVkcsl fVxj dks fuEufyf[kr lw=kuqlkj cuk;k vkSj ifjHkkf"kr fd;k tk ldrk gS &
lw= & CREATE [OR REPLACE] TRIGGER <trigger-name>
BEFORE / AFTER
bUQkZsesfVDl iszfDVlsl
176
mi;qZDr lw= esa ;ksx fd, x, fofHkUu oM~Zl dk dk;Z fuEufyf[kr gS &
CREATE : ;g dh&oMZ ,d u;k MsVkcsl fVxj cukus dk dk;Z djrk gS A
OR REPLACE : ;g dh&oMZ MsVkcsl fVxj tks fd igys ls gh vfLrRo eas gS] dks nqckjk u, fljs
ls cukus dk dk;Z djrk gS A
BEFORE : ;g dh&oMZ vksjsdy dks MsVkcsl fVxj dks Triggerring LVsVesUV~l dks
dk;kZfUor djus ls igys pykus ds fy, fufnZ"V djrk gS A
AFTER : ;g dh oMZ BEFORE dh oMZ ds Bhd foifjr vksjsdy dks MsVkcsl fVxj
dks Triggerring LVsVesUV~l dks dk;kZfUor djus ds ckn pykus ds fy, fufnZ"V djrk gS A
DELETE : ;g dh oMZ ;g fufnZ"V djrk gS] vksjsfdy MsVkcsl fVxj dks ml le; pyk,]
tc mlls lEc) Vsfcy ls fdlh iafDr dks Delete LVsVesUV ds }kjk feVk;k tk jgk gks A
INSERT : ;g dh oMZ ;g fufnZ"V djrk gS fd vksjd
s y MkVkcsl fVxj dks ml le; pyk;s
tc mlls lEc) Vscy esa fdlh iafDr dks INSERT LVsVesUV ds }kjk fo"V fd;k tk jgk gks A
UPDATE....OF
: ;g dh&oMZ ;g fufnZ"V djrk gS fd vksjsdy bl MkVkcsl fVxj dks
rHkh pyk;s tcfd lEc) Vsfcy esa Update LVsVesUV }kjk bl dh&oMZ ds Of ds ckn fn, x,
dkWyEl ds ekuksa esa dksbZ ifjorZu fd;k tkrk gS A ;fn bl dh&oMZ ds ckn Of dk ;ksx ugha fd;k
x;k gS] rks lEc) Vsfcy ds fdlh Hkh dkWye ds eku eas ifjorZu djus ds fy, Update LVsVesUV dk
;ksx djus ij ;g fVxj pysxk A
FOR EACH ROW : ;g dh oMZ] ;g fufnZ"V djrk gS fd orZeku MsVkcsl fVxj ,d Row
Trigger gS A vksjsdy Row Trigger dks R;sd ml iafDr ds fy, ,d ckj pykrk gS] tks fd
Triggerring ls Hkkfor gksrh gks vkSj bl fVxj ds lkFk ;ksx fd, x, WHEN dh&oMZ ds
ckn ifjHkkf"kr fd, x, frcU/kksa dks lR; ikrh gks A
vxys mnkgj.k esa ,d MsVkcsl fVxj del_trin cuk;k x;k gS A bl mnkgj.k esa lcls igys
CREATE OR REPLACE dh&oMZ dk ;ksx djds bl MsVkcsl fVxj dks cuk;k x;k gS A OR
REPLACE dh oMZ ds ;ksx djus ls ;fn igys ls bl uke ls dksbZ fVxj fLFkr Hkh gS] rks ml fVxj
ij ;g vksojjkbV gks tk,xk A blds ckn BEFORE dh oMZ dk ;ksx djds ;g fufnZ"V fd;k x;k
gS fd DEPT Vsfcy ls Delete djus ls iwoZ blds ckn fn, x, LVsVesUV dk;kZfUor gks A bl
LVsVesUV~l esa Employee Vsfcy dh mu iafDr;ksa dks feVkus ds fy, dgk x;k gS] ftuds Deptno dkWye
177
BEGIN
END;
Trigger created
mnkgj.k &
SQL> CREATE TRIGGER updt_trig
2
BEGIN
UPDATE
SLAVE
SET
item_no=:New.item_no,
WHERE
item_no=:OLD.item_no;
6
END;
Trigger created
mijksDr mnkgj.k esa cuk, x, MsVkcsl fVxj Updt_trig ds dkj.k ge tc Hkh MASTER Vsfcy
ds item_no dkWye eas Update LVsVesUV ls dksbZ Hkh ifjorZu djsax]s rks ;g ifjorZu Lor% gh SALVE
Vsfcy ds Hkh item_no dkWye ds fy, Hkh Hkkoh gksxk A
mnkgj.k &
SQL> CREATE OR REPLACE TRIGGER upper_trig
2
BEGIN
bUQkZsesfVDl iszfDVlsl
5
178
6
END;
7
Trigger created
mijksDr mnkgj.k esa cuk, x, MsVkcsl fVxj Upper_trig ds dkj.k ge tc Hkh EMPLOYEE
Vsfcy ds ename dkWye eas Update LVsVesUV ls dksbZ Hkh ifjorZu vFkok Insert LVsVesUV ls dksbZ Hkh
fof"V djsax]s rks ;g lnSo UPPER CASE esa gksxh A
vH;kl u
oLrqfu"B u %
1EXIT LVsVesUV dk ;ksx fd;k tkrk gS \
v ksxzke dk fu;U=.k ywi ds ckgj ykus ds fy,
c ksxzke dk fu;U=.k ywi ds vUnj ykus ds fy,
l ksxzke dk fu;U=.k ywi eas ij ykus ds fy,
n ksxzke dk fu;U=.k ywi eas uhps ykus ds fy,
2dlZj dks ifjpkfyr djus ds fy, dkSuls LVsVesUV dk ;ksx fd;k tkrk gS\
v Open
c Fetch
l Close
n mijksDr lHkh
3fdlh foks"k MkVkcsl Vscy ls tqM+h gqbZ PL/SQLdh ,d lqjf{kr ksxzke bdkbZ dks dgk
tkrk gS\
c Trigger
v Cursor
l Event
n mijksDr eas ls dksbZ ugha
4dlZj &&&& izdkj ds gksrs gSA
c 3
v 4
l 2
n 0
5.
%NOTFOUND Attribute _________ ds Bhd foifjr dk;Z djrk gSA
c %FETCH
v %FILL
l %FOUND
n mijksDr lHkh
________Attribute fetch statement }kjk orZeku iafDr;ksa ds lewg esa iz;ksx esa ykbZ xbZ
6iafDr;ksa fd la[;k eku ds #i esa ykSVkrk gSA
v %COUNT
c % TABLE
l %ROW COUNT
n mijksDr eas ls dksbZ ugha
vfr y?kqkjkRed u %
1- MsVkcsl fVxj ds fdrus Hkkx gksrs gS \
2- MsVkcsl fVxj ds lEcU/k esa Before dh&oMZ dk D;k mi;ksx gS\
3- PL/SQL eas EXIT LVsVesUV dk mi;ksx crkb,A
4- dlZj fdrus izdkj ds gksrs gS\
5- Implicit dlZj fdls dgrs gS\
6- Explicit dlZj fdls dgrs gS\
7- Implicit vkSj Explicit dlZj esa vUrj crkb;sA
8- %ROWCOUNT dk D;k dk;Z gS\
9- %NOTFOUND dk mi;ksx D;ksa fd;k tkrk gS\
10- %FOUND dk mi;ksx dc fd;k tkrk gS\
11- Close dk mi;ksx dc fd;k tkrk gS\
12- ,d Database esa fVxj ds fdrus Hkkx gksrs gS\
13- Trigger D;k gksrs gS\
14- Trigger fdrus izdkj fd gksrs gS\
15- After Trigger D;k gksrk gS\
y?kq kjkRed u %
1- PL/SQL esa EXIT LVsVesUV ds lkFk When dk ;ksx djus ij D;k Hkko iM+rk gS\
2- While LVsVesUV dk mi;ksx crkb,A
3- Goto LVsVesUV dk mi;ksx crkb,A
4- PL/SQL ds fdl Hkkx eas dlZj dks fMdys;j fd;k tkrk gS\
5- MsVkcsl fVxj ds fdrus Hkkx gksrs gS\
6- Trigger dks mnkgj.k lfgr le>kb;sA
7- After vkSj Befor Trigger esa vUrj crkb;sAa
8- %ROW COUNT dks mnkgj.k nsdj le>kb;sA
9- Database ds izdkj dks foLrkj ls le>kb;sA
10- After Trigger dk Syntex crkb;sA
11- Befor Trigger dk Syntex crkb;sA
12- Trigger dks fdl izdkj Delete fd;k tkrk gSa\
179
bUQkZsesfVDl iszfDVlsl
180