Методические материалы к спецкурсу “Распределенные базы

advertisement
FBGBKL?JKL<H H;J:AH<:GBY JN
<HJHG?@KDBC =HKM>:JKL<?GGUC MGB<?JKBL?L
N:DMEVL?L IJBDE:>GHC F:L?F:LBDB B F?O:GBDB
D:N?>J: F:L?F:LBQ?KDH=H H;?KI?Q?GBY W<F
F_lh^bq_kdb_fZl_jbZeudki_pdmjkm
³JZkij_^_e_ggu_[Zau^ZgguogZijbf_j_ORACLE”
^eyklm^_glh\dmjkZ^g_\gh]hhl^_e_gby
KhklZ\bl_evBN:klZoh\Z
<hjhg_`- 2000
1
F_lh^bq_kdb_fZl_jbZeuj_dhf_g^m_lkybkihevah\Zlv^eyijh\_^_gby
e_dpbhgguobeZ[hjZlhjguoaZgylbcihki_pdmjkmgZdmjk_^g_\gh]hhl^_
e_gby³JZkij_^_e_ggu_[Zau^ZgguogZijbf_j_ORACLE”. <f_lh^bq_kdbo
fZl_jbZeZo jZkkfZljb\Zxlky Zjobl_dlmjZ wda_fieyjZ ORACLE hibkZgb_
hkgh\guoh[t_dlh\bwe_f_gluijh]jZffbjh\ZgbygZyaud_KM;>ORACLE.
F_lh^bq_kdb_ fZl_jbZeu jZkkqblZgu gZ klm^_glh\ ^g_\gh]h b \_q_jgbo
hl^_e_gbcZkibjZglh\fZ]bkljh\bgZgZmqguojZ[hlgbdh\aZgbfZxsboky
jZajZ[hldhcijbeh`_gbc^eyjZkij_^_e_gguo[Za^ZgguokihfhsvxKM;>
ORACLE.
J_p_ga_glu
^lgaZ\dZnl_ogbq_kdhcdb[_jg_lbdbbZ\lhfZlbq_kdh]h
j_]mebjh\Zgby<=MEha]Zq_\=B
AZf^bj_dlhjZnbebZeZA:H³Kl_jebg]J=jmiK:´\]<hjhg_`_
Ev\h\K<
I_qZlZ_lkyihj_r_gbxj_^Zdpbhggh]hKh\_lZnZdmevl_lZijbdeZ^ghc
fZl_fZlbdbbf_oZgbdb<hjhg_`kdh]h]hkm^Zjkl\_ggh]hmgb\_jkbl_lZ
J_^ZdlhjDmag_ph\ZA?
:klZoh\ZBjbgZN_^hjh\gZ
<hjhg_`kdbc]hkm^Zjkl\_ggucmgb\_jkbl_l
2
JZkij_^_e_ggu_[Zau^ZgguoORACLE)
GZ g_dhlhjh_ \j_fy aZ[m^_f h l_ogbq_kdbo kj_^kl\Zo h[kem`b\Zx
sbo l_ogheh]bx deb_gl-k_j\_j \ dhlhjhc k_j\_j \uklmiZ_l dZd ma_e eh
dZevghc \uqbkebl_evghc k_lb E<K b hij_^_ebf k_j\_j dZd eh]bq_kdbc
ijhp_kk dhlhjuc h[_ki_qb\Z_l h[kem`b\Zgb_ aZijhkh\ ^jm]bo ijhp_kkh\
lh_klvk_j\_jhl\_qZ_laZh[kem`b\Zgb_aZijhkh\d[Za_^ZgguoDeb_glwlhijhp_kkihkueZxsbcaZijhkgZh[kem`b\Zgb_=eZ\gh_hlebqb_deb
_glZhlk_j\_jZaZdexqZ_lky\lhfqlhdeb_glfh`_lgZqZlvljZgaZdpbxk\y
abkk_j\_jhfZk_j\_jgbdh]^Zg_gZqbgZ_lljZgaZdpbxk\yabkdeb_glhf
:jobl_dlmjZ deb_gl-k_j\_j h[_ki_qb\Z_l ijbdeZ^guf ijh]jZffZf
deb_glZ^hklmid^ZggufdhlhjufbmijZ\ey_lk_j\_jWlhhkgh\gh_gZagZ
q_gb_wlhcZjobl_dlmjulh_klvg_kdhevdhdeb_glh\wnn_dlb\ghbkihevam
xl h^bg k_j\_j Ijb l_ogheh]bb deb_gl-k_j\_j bkihevam_lky jZkij_^_e_g
gZyh[jZ[hldZjZkij_^_e_gguo[Za^ZgguoJZkij_^_e_ggZyh[jZ[hldZ-wlh
h[jZ[hldZ k bkihevah\Zgb_f fgh`_kl\Z \uqbkebl_evguo j_kmjkh\ Ijbf_
gbl_evghdE<KjZkij_^_e_ggZyh[jZ[hldZhagZqZ_ll_ogheh]bxijbdhlh
jhcgZjZ[hq_cklZgpbb\uihegyxlkyijbdeZ^gu_ijh]jZffuZgZk_j\_j_
;>hkms_kl\eyxlkyhi_jZpbbih^hklmimbhl[hjm^ZgguoIh^jZkij_^_
e_gghc;>ihgbfZxlojZg_gb_h[uqguolZ[ebpbeb^Z`_qZkl_clZ[ebp\
jZaebqguomaeZoE<K
Bkihevah\Zgb_l_ogheh]bbdeb_gl-k_j\_jih^jZamf_\Z_lgZebqb_kj_
^ui_j_^Zqb^Zgguof_`^mdeb_glhfbk_j\_jhfLZdhckj_^hch[uqghy\
ey_lkyehdZevgZy\uqbkebl_evgZyk_lvE<K
KljmdlmjZwda_fieyjh\ Oracle
Wda_fieyj Oracle -keh`gucdhfie_dkkljmdlmjiZfylbbijhp_kkh\hi_
jZpbhgghc kbkl_fu jbk DZ`^Zy ;> Oracle bf__l k\yaZgguc k g_c wd
a_fieyjHj]ZgbaZpbywda_fieyjZiha\hey_lKM;>h[kem`b\Zlvfgh`_kl\h
lbih\ ljZgaZdpbc [_ki_qb\Zlv \ukhdmx ijhba\h^bl_evghklv p_ehklghklv
^Zgguo b [_ahiZkghklv L_jfbg ijhp_kk hagZqZ_l ex[mx aZ^Zqm \uihe
gy_fmx[_a\f_rZl_evkl\Zihevah\Zl_ey.
Hldjulb_;> Oracle\dexqZ_lljbklZ^bb
1. Nhjfbjh\Zgb_wda_fieyjZ Oracle ij_^mklZgh\hqgZyklZ^by
2. MklZgh\dZ[Zau^Zgguowda_fieyjhfmklZgh\hqgZyklZ^by
3. Hldjulb_;>klZ^byhldjulby
Wda_fieyj \dhlhjhfg_l[Zau^ZgguogZau\Z_lkyg_aZgyluf (idlegh
hg aZgbfZ_liZfylvbg_\uihegy_lgbdZdhcjZ[hluWda_fieyjfh`_lih^
kh_^bgblvkylhevdhdh^ghc;>Z^hl_oihjihdZg_[m^_lbkihevah\Zg Par-
3
allel Server,;>fh`_l[ulvih^dexq_gZlhevdhdh^ghfmwda_fieyjm Oracle.
Wda_fieyj — wlhfha]kbkl_fuh[jZ[hldb^Zgguo<wda_fieyj_\uihegy
xlky\k_hi_jZpbb\lh\j_fydZd\;>ojZgylky\k_^Zggu_
;hevrbgkl\h gZkljh_d wda_fieyjZ k\yaZgh k dhfihg_glZfb \ ]eh[Zevghc
kbkl_fghch[eZklbGhdjhf_gbokms_kl\mxlbg_dhlhju_hipbbgZkljhcdb
dZkZxsb_kynhgh\uoijhp_kkh\
=eh[ZevgZykbkl_fgZyh[eZklv
<SGA ojZgylkykljmdlmjuiZfylbg_h[oh^bfu_^eyfZgbimebjh\Zgby
^ZggufbZgZebaZij_^eh`_gbc SQLbdwrbjh\ZgbyljZgaZdpbcDwlhch[
eZklbh^gh\j_f_gghbf__l^hklmifgh`_kl\hijhp_kkh\dhlhju_fh]mlkqb
lu\Zlv ^Zggu_ bag__bebfh^bnbpbjh\Zlvbo<k_hi_jZpbbk;>bkihev
amxl bgnhjfZpbx gZoh^ysmxky \ SGA. SGA \u^_ey_lky kjZam `_ ihke_
kha^Zgby wda_fieyjZ _s_ gZ ij_^mklZgh\hqghc klZ^bb Hk\h[h`^Z_lky wlZ
h[eZklvlhevdhihke_ihegh]h\udexq_gbywda_fieyjZ
Wda_fieyj Oracle ij_^klZ\ey_l kh[hc keh`gucdhfie_dk\aZbfh^_ckl
\mxsboijhp_kkh\ SGAkhklhblbake_^mxsbodhfihg_glh\
•jZa^_ey_fucime (Shared Pool);
•dwr-[mn_j^Zgguo (Database Buffer Cache);
•[mn_j`mjgZeZljZgaZdpbc (Redo Log Buffer);
•kljmdlmjuk_j\_jZfgh]haZ^Zqghckj_^u (Multi-Threaded Server — MTS).
JZa^_ey_fucime
JZa^_ey_fuc ime jbk kh^_j`bl dwr [b[ebhl_db dwr keh\Zjy b
mijZ\eyxsb_kljmdlmjuk_j\_jZ
lZdb_dZdgZ[hjkbf\heh\;>Dwr[b[
ebhl_dbojZgblieZg\uiheg_gbyij_^eh`_gbc SQLA^_kvkh^_j`ZlkyaZ]h
eh\dbiZd_lh\ PL/SQLbijhp_^mj\uihegy\rbokyjZg__Dwrkeh\ZjyojZ
gbl kljhdb keh\Zjy ^Zgguo dhlhju_ [ueb bkihevah\Zgu ^ey e_dkbq_kdh]h
ZgZebaZ ij_^eh`_gbc SQL. K_j\_j Oracle bkihevam_l dwr [b[ebhl_db ^ey
ih\ur_gbykdhjhklb\uiheg_gbyhi_jZlhjh\ SQL.
JZaf_jjZa^_ey_fh]himeZaZ^Z_lkyiZjZf_ljhf SHARED POOL SIZE\
nZce_ init.ora.JZaf_jghklvagZq_gbyiZjZf_ljZ —[ZcluG_h[oh^bfhaZdZ
au\Zlvh[t_fimeZ
Dwr-[mn_j^Zgguo
Dwr-[mn_j ^Zgguo khklhbl ba [ehdh\ iZfylb lh]h `_ jZaf_jZ qlh b
[ehdb Oracle.<k_^Zggu_kdhlhjufbjZ[hlZ_lKM;>i_j\uf^_ehfaZ]jm
`Zxlky\dwr-[mn_j<wlbo`_[ehdZoiZfylb\uihegy_lkybex[h_h[gh\
e_gb_^ZgguoIhwlhfmhq_gv\Z`ghijZ\bevghmklZgh\blvjZaf_j[mn_jZ
KM;>i_j_ghkbl^Zggu_gZ^bkd —\khhl\_lkl\bbkihjy^dhfbojZa
f_s_gby \ kibkd_ LRU (Least Recently Used). Wlhl kibkhd hlke_`b\Z_l h[
jZs_gb_d[ehdZf^Zgguobmqblu\Z_lqZklhlmh[jZs_gbc?keb\uihegy_l
kyh[jZs_gb_d[ehdm^ZgguoojZgys_fmky\dwr-[mn_j_lhihf_sZ_lky\
lhldhg_pkibkdZdhlhjucghkblgZa\Zgb_ MRU (Most Recently Used).?keb
k_j\_jmlj_[m_lkyf_klh\dwr-[mn_j_^eyaZ]jmadbgh\h]h[ehdZlhhgj_4
Jbk
rZ_l wlhl fhf_gl k ihfhsvx kibkdZ LRU dZdhc ba [ehdh\ i_j_g_klb gZ
^bkdqlh[uhk\h[h^blvf_klh^eygh\h]h;ehdbgZb[he__hlklhysb_\kib
kd_hl MRU -dZg^b^ZlugZm^Ze_gb_badwr-[mn_jZLZdbfh[jZahf^hevr_
\k_]h hklZxlky \ dwr-[mn_j_ l_ [ehdb d dhlhjuf qZs_ \k_]h \uihegy_lky
h[jZs_gb_Fh^bnbpbjh\Zggu_[ehdbgZau\Zxlky]jyagufb (dirty)bihf_
sZxlky\khhl\_lkl\mxsbc dirty-kibkhd
;mn_j`mjgZeZljZgaZdpbc
>Zggu_hljZgaZdpbyoojZgylky\wlhf[mn_j_^hl_oihjihdZg_[m
^ml i_j_ibkZgu \ nZce hi_jZlb\gh]h `mjgZeZ ljZgaZdpbc Ihke_ aZiheg_
gby[mn_jZ_]hkh^_j`bfh_i_j_ghkblky\nZce`mjgZeZljZgaZdpbc
JZaf_j [mn_jZ `mjgZeZ ljZgaZdpbc aZ^Z_lky iZjZf_ljhf
LOG_BUFFER.AgZq_gb_iZjZf_ljZmdZau\Z_ljZaf_j[mn_jZ\[ZclZo
< j_amevlZl_ \u ihemqbl_ \j_fy dhlhjh_ ihevah\Zl_evkdb_ ijhp_kku
gZoh^bebkv \ khklhygbb h`b^Zgby ijb h[jZs_gbb d [mn_jm `mjgZeZ ljZg
aZdpbc
Nhgh\u_ijhp_kku Oracle
<ijhp_kk_jZ[hluKM;> OracleijhkfZljb\Z_llukyqbaZibk_c\lZ[
ebpZo^Zgguohl\_qZ_lgZkhlgbaZijhkh\ihevah\Zl_e_ch^gh\j_f_ggh<ky
jZ[hlZ jZkij_^_ey_lky f_`^m fgh`_kl\hf ijh]jZff dhlhju_ jZ[hlZxl g_
aZ\bkbfh h^gZ hl ^jm]hc ijbq_f m dZ`^hc k\hy jhev < kh\hdmighklb wlb
ijh]jZffugZau\Zxlkynhgh\ufbijhp_kkZfb Oracle.
Fgh`_kl\hnhjh\uoijhp_kkh\ Oracle\dexqZ_l
• SMON b PMON,
• DBWR,
5
• LGWR,
• ARCH,
• KDJL,
• RECO,
• SPUn,
• Dnnn,
-LCKn
LZd`_gm`ghh[jZlblv\gbfZgb_gZijhp_kku Userb Server,\uihegyxsb_
h[jZ[hldmljZgaZdpbcbijhp_kku Parallel Query (Pnnn),dhlhju_hl\_lkl\_g
guaZh[jZ[hldmiZjZee_evguoaZijhkh\Ohlywlbijhp_kkubg_d\Zebnbpb
jmxlky dZd nhgh\u_ hgb b]jZxl agZqbl_evgmx jhev \ nmgdpbhgbjh\Zgbb
kbkl_fu
Ijhp_kkuPMONbSMON \uihegyxl Z\lhfZlbq_kdmx ³m[hjdm´
ihke_ \g_aZigh ij_djZlb\rboky beb aZ\_jrb\rboky Z\Zjbcgh ijhp_kkh\
Ihke_aZimkdZ;>ijhp_kkSMON\uihegy_lZ\lhfZlbq_kdh_\hkklZgh\e_gb_
wda_fieyjZ?kebijbihke_^g_f\udexq_gbb;>qlh-eb[hg_[uehaZ\_jr_
gh SMONZ\lhfZlbq_kdbaZimkdZ_lg_aZ\_jr_ggu_hi_jZpbb
PMON - Process MonitorFhgblhjijhp_kkh\\uihegy_lZ\lhfZlbq_
kdmxm[hjdmihke_\g_aZighij_djZlb\rbokybebaZ\_jrb\rbokyZ\Zjbcgh
ijhp_kkh\WlZm[hjdZ\dexqZ_lm^Ze_gb_k_ZgkZ[ehdbjh\hddhlhju_[u
eb bf mklZgh\e_gu g_ijbgyluo ljZgaZdpbc hk\h[h`^_gb_ j_kmjkh\ ]eh
[Zevghckbkl_fghch[eZklb\u^_e_gguowlhfmijhp_kkm Nhgh\u_ijhp_kku
SMONb PMON^he`gu[ulvg_ij_f_gghaZims_guijbaZimkd_kbkl_fu<
ijhlb\ghfkemqZ_kbkl_fZnmgdpbhgbjh\Zlvg_[m^_l
Ijhp_kk DBWR - Database Writer —hl\_qZ_laZi_j_ghkh[gh\e_gguo
[ehdh\ aZg_k_gguo \ dirty-cibkhd ba dwr-[mn_jZ ^Zgguo \ nZceu ^Zgguo
<f_klhlh]hqlh[uaZibku\ZlvdZ`^uc[ehdgZ^bkdkjZam'%:5`^_lihdZ
g_[m^_l\uiheg_ghh^ghbamkeh\bcZaZl_fijhkfZljb\Z_ldirty-cibkhdb
\k_ hlf_q_ggu_ \g_f[ehdbi_j_ibku\Z_lgZ^bkd
Ijhp_kk LGWR -— q_l\_jluc b ihke_^gbc nhgh\uc ijhp_kk aZimkd
dhlhjh]hh[yaZl_e_g^eyjZ[hluKM;> Oracle.Wlhlijhp_kkhl\_qZ_laZi_j_
aZibkv bgnhjfZpbb ba [mn_jZ `mjgZeZ ljZgaZdpbc dhlhjuc gZoh^blky \
]eh[Zevghc kbkl_fghc h[eZklb \ nZceu hi_jZlb\gh]h `mjgZeZ Oracle g_
kqblZ_l ljZgaZdpbx \uiheg_gghc ^h l_o ihj ihdZ ijhp_kk LGWR g_ i_j_aZibr_l^Zggu_hg_cba[mn_jZ`mjgZeZljZgaZdpbc\nZceWlhlijhp_kk
j_^dhkem`blijbqbghchkeh`g_gbc\jZ[hl_
Ijhp_kku-^bki_lq_ju
Ijhp_kku k_j\_jZ fh]ml [ulv eb[h aZdj_ie_gu aZ hij_^_e_ggufb
ihevah\Zl_evkdbfbijhp_kkZfbeb[hbkihevah\Zlvkyfgh]bfbihevah\Zl_ev
kdbfbijhp_kkZfbkh\f_klgh<ihke_^g_fkemqZ_hgbgZau\ZxlkyjZa^_ey_
fufb ijhp_kkZfb beb k_j\_jZfb Ijb bo bkihevah\Zgbb \ kbkl_f_ ^he`_g
6
kms_kl\h\Zlv dZd fbgbfmf h^bg ijhp_kk – ^bki_lq_j Bo fh`_l [ulv b
[hevr_\aZ\bkbfhklbhlhi_jZpbhgghckj_^u
Ijhp_kkARCH hl\_qZ_laZdhibjh\Zgb_iheghklvxaZiheg_ggh]hhi_
jZlb\gh]h`mjgZeZljZgaZdpbc\Zjob\gu_nZceu`mjgZeh\ljZgaZdpbc<h
\j_fyi_j_aZibkb\Zjob\gbdZdhc^jm]hcijhp_kkg_fh`_lihemqblv^hklmi
d`mjgZem<h\j_fydhibjh\Zgby\Zjob\kbkl_fZ^he`gZgZoh^blvky\kh
klhygbbh`b^Zgby
CKPT – wlh ^hihegbl_evguc nhgh\uc ijhp_kk dhlhjuc hl\_qZ_l aZ
h[jZ[hldm dhgljhevguo lhq_d g_h[oh^bfhklv \ g_f \hagbdZ_l dh]^Z gZ^h
kgbablvgZ]jmadmgZLGWR.
Ijhp_kk RECOhl\_qZ_laZ\hkklZgh\e_gb_g_aZ\_jr_gguoljZgaZdpbc
\jZkij_^_e_gghckbkl_f_;>Dh]^Z\hagbdZ_lih^hajbl_evgZyljZgaZdpby
RECO \uihegy_l k\hb nmgdpbb Z\lhfZlbq_kdb [_a \f_rZl_evkl\Z
Z^fbgbkljZlhjZ;>
Ijhp_kk SNPn \uihegy_l Z\lhfZlbq_kdb_ h[gh\e_gby kgbfdh\ b aZ
imkdZ_lijhp_^mju\khhl\_lkl\bbkjZkrbj_gb_f
LCKn –iha\hey_l\kj_^_kiZjZee_evgufh[kem`b\Zgb_fdh^ghc;>
h[jZsZlvky fgh`_kl\m wda_fieyjh\ Oracle. GZ wlhl ijhp_kk \haeZ]Z_lky
hl\_lkl\_gghklv aZ dhhj^bgZpbx [ehdbjh\hd mklZgZ\eb\Z_fuo jZagufb
wda_fieyjZfb ?keb g_l ijhp_kkZ iZjZee_evgh]h h[kem`b\Zgby lh
g_h[oh^bfhklv\wlhfijhp_kk_hliZ^Z_l
Ijhp_kku iZjZee_evguo aZijhkh\ ihemqbeb \ kbkl_f_ gZbf_gh\Zgb_
Pnnn.K_j\_j OracleaZimkdZ_lbhklZgZ\eb\Z_lijhp_kku Pnnn\aZ\bkbfhklb
hlZdlb\ghklbjZ[hluk;>bgZkljhcdbhipbciZjZee_evguoaZijhkh\Wlb
ijhp_kkuijbgbfZxlmqZklb_\nhjfbjh\Zgbbbg^_dkh\lZ[ebpbaZijhkh\
Dhebq_kl\h aZimkdZ_fuo ijhp_kkh\ hij_^_ey_lky ^\mfy iZjZf_ljZfb
PARALLEL MIH SERVERS b PARALLEL_MAX SERVERS, hij_^_eyxsbfbkhhl\_lkl\_gghfbgbfZevgh_bfZdkbfZevgh_dhebq_kl\haZ
imkdZ_fuoijhp_kkh\
Ijhp_kkuihevah\Zl_eybk_j\_jZ
Ijbeh`_gby b mlbeblu k\yau\Zxlky k KM;> ihkj_^kl\hf ijhp_kkh\
ihevah\Zl_ey DZ`^uc ijhp_kk ihevah\Zl_ey ih^dexqZ_lky d ijhp_kkm k_j
\_jZ Ijhp_kk k_j\_jZZgZebabjm_lb\uihegy_li_j_^Zggu__fmhi_jZlhju
SQL b \ha\jZsZ_l j_amevlZl ijhp_kkm ihevah\Zl_ey Djhf_ lh]h ijhp_kk
k_j\_jZ kqblu\Z_l [ehdb ^Zgguo ba nZceh\ ^Zgguo b jZaf_sZ_l bo \ dwr[mn_j_^Zgguo
Hkgh\gu_h[t_dluKM;>ORACLE
Oracleih^^_j`b\Z_lj_eypbhggmxfh^_ev^Zgguoihwlhfm_kl_kl\_g
gh qlh d qbkem hkgh\guo h[t_dlh\ Oracle hlghkylky lZ[ebpZ ij_^klZ\e_
gb_yihevah\Zl_ev
LZ[ebpZ (TABLE) y\ey_lky [Zah\hc kljmdlmjhc j_eypbhgghc fh^_eb
<ky bgnhjfZpby \ [Za_ ^Zgguo ojZgblky \ lZ[ebpZo LZ[ebpu khklhyl ba
7
fgh`_kl\Z ihbf_gh\Zgguo klhe[ph\ beb Zljb[mlh\ Fgh`_kl\h agZq_gbc
klhe[pZhij_^_e_ghkihfhsvxh]jZgbq_gbcp_ehklghklblh_klvih^^_j`b
\Z_lkyh]jZgbq_ggZydhgp_ipby^hf_gZIhegh_bfylZ[ebpu\[Za_^Zgguo
khklhblbabf_gbko_fu\^Zgghcj_ZebaZpbbkh\iZ^Zxs_fkbf_g_fihev
ah\Zl_eykha^Z\r_]hlZ[ebpmbkh[kl\_gghbf_gblZ[ebpuLZ[ebpZfh`_l
[ulv imklhc beb khklhylv ba h^ghc beb [he__ kljhd agZq_gbc Zljb[mlh\
KljhdbagZq_gbcZljb[mlh\lZ[ebpugZau\ZxlkylZd`_dhjl_`Zfb
Ij_^klZ\e_gb_ (VIEW) — wlh ihbf_gh\ZggZy ^bgZfbq_kdb ih^^_j
`b\Z_fZy k_j\_jhf \u[hjdZ ba h^ghc beb g_kdhevdbo lZ[ebp Hi_jZlhj
SELECT, hij_^_eyxsbc \u[hjdm h]jZgbqb\Z_l \b^bfu_ ihevah\Zl_e_f
^Zggu_K_j\_j]ZjZglbjm_lZdlmZevghklvij_^klZ\e_gbylh_klvnhjfbjh
\Zgb_ ij_^klZ\e_gby fZl_jbZebaZpby khhl\_lkl\mxs_]h aZijhkZ ijhba\h^blkydZ`^ucjZaijbbkihevah\Zgbbij_^klZ\e_gbyBkihevamyij_^klZ\
e_gbyZ^fbgbkljZlhj[_ahiZkghklbh]jZgbqb\Z_l^hklmigmxihevah\Zl_eyf
qZklv[Zau^Zgguolhevdhl_fb^Zggufbdhlhju_j_Zevghg_h[oh^bfu^ey
\uiheg_gby_]hjZ[hlu
Ihevah\Zl_ey (USER) — h[t_dl h[eZ^Zxsbc \hafh`ghklvx kha^Z
\Zlvbbkihevah\Zlv^jm]b_h[t_dluOracle,ZlZd`_aZijZrb\Zlv\uiheg_gb_
nmgdpbck_j\_jZDqbkemlZdbonmgdpbchlghkylkyhj]ZgbaZpbyk_kkbbba
f_g_gb_khklhygbyk_j\_jZb[Zau^ZgguoaZijhkgZ\uiheg_gb_hi_jZlhjh\
SQLb^j >eymijhs_gbyj_r_gbyaZ^Zqb^_glbnbdZpbbbbf_gh\Zgby\[Z
a_^Zgguo Oracleih^^_j`b\Z_lh[t_dluihke_^h\Zl_evghklvbkbghgbf
Ihke_^h\Zl_evghklv (SEQUENCE) — wlh h[t_dl h[_ki_qb\Zxsbc
]_g_jZpbx mgbdZevguo ghf_jh\ \ mkeh\byo fgh]hihevah\Zl_evkdh]h Zkbg
ojhggh]h ^hklmiZH[uqghwe_f_gluihke_^h\Zl_evghklbbkihevamxlky^ey
\klZ\dbmgbdZevguob^_glbnbdZpbhgguoghf_jh\^eywe_f_glh\lZ[ebp[Z
au^Zgguo
Kbghgbf (SYNONYM) —wlhZevl_jgZlb\gh_bfy-ik_\^hgbfh[t_dlZ
Oracle, dhlhjuc iha\hey_l ihevah\Zl_eyf [Zau ^Zgguo bf_lv ^hklmi d ^Zg
ghfm h[t_dlm Kbghgbf fh`_l [ulv qZklguf b h[sbf H[sbc (public) kb
ghgbf iha\hey_l \k_f ihevah\Zl_eyf [Zau ^Zgguo h[jZsZlvky d khhl\_lkl
\mxs_fmh[t_dlmihZevl_jgZlb\ghfmbf_gb
>eymijZ\e_gbywnn_dlb\ghklvx^hklmiZd^ZggufOracleih^^_j`b
\Z_lh[t_dlubg^_dklZ[ebqgZyh[eZklvbdeZkl_j
Bg^_dk (INDEX) — wlh h[t_dl [Zau ^Zgguo kha^Z\Z_fuc ^ey ih\u
r_gbyijhba\h^bl_evghklb\u[hjdb^ZgguoBg^_dkkha^Z_lky^eyklhe[ph\
lZ[ebpubebij_^klZ\e_gby\ijhkljZgkl\_[Zau^Zgguobh[_ki_qb\Z_l[h
e__[ukljuc^hklmid^Zgguf[Zau^ZgguoaZkq_lojZg_gbyijyfuokkuehd
gZf_klhjZkiheh`_gbykljhdkh^_j`Zsbolj_[m_fu_^Zggu_
LZ[ebqgZyh[eZklv (TABLESPACE) —bf_gh\ZggZyqZklv[Zau^Zg
guobkihevam_fZy^eyjZkij_^_e_gbyiZfylb^eylZ[ebpbbg^_dkh\
DeZkl_j (CLUSTER) —h[t_dlaZ^Zxsbckihkh[kh\f_klgh]hojZ
8
g_gby^Zgguog_kdhevdbolZ[ebpkh^_j`Z\rbobgnhjfZpbxh[uqghh[jZ
[Zlu\Z_fmx kh\f_klgh DeZkl_jbaZpby klhe[ph\ lZ[ebp iha\hey_l mf_gv
rblv\j_fy\uiheg_gby\u[hjdbKljhdblZ[ebpbf_xsb_h^bgZdh\h_agZ
q_gb_ \ deZkl_jbah\Zgguo klhe[pZo ojZgylky \ [Za_ ^Zgguo ki_pbZevguf
h[jZahf
>eywnn_dlb\gh]hmijZ\e_gbyjZa]jZgbq_gb_f^hklmiZd^Zgguf Oracleih^^_j`b\Z_lh[t_dljhev
Jhev (ROLE) — bf_gh\ZggZy kh\hdmighklv ijb\be_]bc dhlhju_ fh
]ml[ulvij_^hklZ\e_guihevah\Zl_eyfbeb^jm]bfjheyf Oracleih^^_j`b
\Z_l g_kdhevdh klZg^Zjlguo beb ij_^hij_^_e_gguo jhe_c Ki_pbnbqgufb
^ey jZkij_^_e_gguo kbkl_f y\eyxlky h[t_dlu Oracle: kgbfhd b k\yav [Zau
^Zgguo
Kgbfhd (SNAPSHOT) — ehdZevgZy dhiby lZ[ebpu m^Ze_gghc [Zau
^Zgguo dhlhjZy bkihevam_lky eb[h ^ey lbjZ`bjh\Zgby dhibjh\Zgby \k_c
beb qZklb lZ[ebpu eb[h ^ey lbjZ`bjh\Zgby j_amevlZlZ aZijhkZ ^Zgguo ba
g_kdhevdbo lZ[ebp Kgbfdb fh]ml [ulv fh^bnbpbjm_fufb beb ij_^gZagZq_ggufblhevdh^eyql_gbyKgbfdblhevdh^eyql_gby\hafh`ghi_jbh
^bq_kdb h[gh\eylv hljZ`Zy baf_g_gby hkgh\ghc lZ[ebpu Baf_g_gby k^_
eZggu_\fh^bnbpbjm_fhfkgbfd_jZkijhkljZgyxlkygZhkgh\gmxlZ[ebpm
b^jm]b_dhibb
K\yav[Zwu^Zgguo (DATABASE LINK) —wlhh[t_dl[Zau^Zgguo
dhlhjuciha\hey_lh[jZlblvkydh[t_dlZfm^Ze_gghc[Zau^ZgguoBfyk\yab
[Zau^Zgguofh`ghjZkkfZljb\ZlvdZdkkuedmgZiZjZf_ljuf_oZgbafZ^hk
lmiZ d m^Ze_gghc [Za_ ^Zgguo bfy maeZ ijhlhdhe b l i Bkihevah\Zgb_
h^gh]hbf_gbmijhsZ_ljZ[hlmkh[t_dlZfbm^Ze_gghc[Zau^Zgguo
>eyijh]jZffbjh\ZgbyZe]hjblfh\h[jZ[hldb^Zgguoj_ZebaZpbbf_
oZgbafh\ ih^^_j`db p_ehklghklb [Zau ^Zgguo Oracle bkihevam_l h[t_dlu
ijhp_^mjZnmgdpbyiZd_lbljb]]_j
Ijhp_^mjZ (PROCEDURE) —wlhihbf_gh\Zgguckljmdlmjbjh\Zg
guc gZ[hj i_j_f_gguo b hi_jZlhjh\ SQL b PL/SQL, ij_^gZagZq_gguc ^ey
j_r_gbydhgdj_lghcaZ^Zqb
Nmgdpby (FUNCTION) — wlh ihbf_gh\Zgguc kljmdlmjbjh\Zgguc
gZ[hji_j_f_gguobhi_jZlhjh\ SQLbPL/SQL,ij_^gZagZq_gguc^eyj_r_
gbydhgdj_lghcaZ^Zqbb\ha\jZsZxsbcagZq_gb_i_j_f_gghc
IZd_l (PACKAGE) —wlhihbf_gh\Zgguckljmdlmjbjh\ZggucgZ[hj
i_j_f_gguo ijhp_^mj b nmgdpbc k\yaZgguo _^bguf nmgdpbhgZevguf aZ
fukehfGZijbf_jOracleihklZ\ey_liZd_l DBMS_OUTPUT.\dhlhjhfkh[
jZgu ijhp_^mju b nmgdpbb ij_^gZagZq_ggu_ ^ey hj]ZgbaZpbb \\h^Z\u\h^Z
Ljb]]_j (TRIGGER) —wlhojZgbfZyijhp_^mjZdhlhjZyaZimkdZ_l
kyZ\lhfZlbq_kdb\uihegy_lkylh]^Zdh]^Zijhbkoh^blk\yaZggh_kljb]]_
jhfkh[ulb_H[uqghkh[ulbyk\yaZguk\uiheg_gb_fhi_jZlhjh\ INSERT,
9
UPDATE beb DELETE\g_dhlhjhclZ[ebp_
2. Lbiu^ZgguoORACLE
Kljhdh\u_lbiu
Lbi CHARACTER bkihevam_lky ^ey ojZg_gby kljhd nbdkbjh\Zgghc
^ebgu
KbglZdkbkCHARACTER>^ebgZ@CHAR>^ebgZ@
FZdkbfZevgh_agZq_gb_iZjZf_ljZ^ebgZ–kbf\heh\
LbiVARCHAR bkihevam_lky^eyojZg_gbykljhdi_j_f_gghc^ebgu
Ke_^mxsb_ij_^eh`_gbywd\b\Ze_glgu
9$5&+$5>^ebgZ@
&+$5
9$5<,1*>^ebgZ@
&+$5$&7(5
9$5<,1*>^ebgZ@
?keb ^ebgZ kljhdb g_ mdZaZgZ y\gh hgZ iheZ]Z_lky jZ\ghc \h \k_o
kemqZyo FZdkbfZevgh_ agZq_gb_ iZjZf_ljZ ^ebgZ – kbf\heh\ ^ey
ihke_^gbolj_okemqZ_\
Ijbf_ju
Str1 CHAR(15)
Str2 CHARACTER
VarSts1 VARCHAR (15)
VarStr2 CHARACTER VARYING (10)
?klvlbioZjZdl_jguclhevdh^eyORACLE
VARCHAR>^ebgZ@
Kihfhsvxwlh]hlbiZj_a_j\bjm_lkyg_h[oh^bfh_ijhkljZgkl\h
>ey ojZg_gby [hevrbo kljhd i_j_f_gghc ^ebgu bkihevam_lky lbi
LONG>^ebgZ@ _keb iZjZf_lj ^ebgZ g_ mdZaZg lh ij_^iheZ]Z_lky qlh m
kljhdb^ebgZf_]Z[ZclZfZdkbfZevgZy^ebgZ]b]Z[ZclZ
Qbkeh\u_lbiu
Lbi INTEGERbkihevam_lky^eyij_^klZ\e_gbyqbk_ehl –231 ^h 231 .
KbglZdkbk: INTEGER, INT.
Ijbf_j
varint INTEGER
varint2 INT
Lbi NUMBER>Lhevdh^ey Oracle]bkihevam_lky^ey ij_^klZ\e_gby
qbk_ekaZ^ZgghclhqghklvxKbglZdkbk NUMBER [lhqghklv [,fZk
rlZ[@@
?keb agZq_gb_ iZjZf_ljZ lhqghklv g_ mdZaZgh y\gh hgh iheZ]Z_lky
jZ\guf 38.AgZq_gb_iZjZf_ljZfZkrlZ[ihmfheqZgbxij_^iheZ]Z_lkyjZ\
guf0AgZq_gb_iZjZf_ljZlhqghklvfh`_lbaf_gylvkyhl 1^h 38;agZq_gb_
10
iZjZf_ljZfZkrlZ[fh`_lbaf_gylvkyhl -84^h 128.Bkihevah\Zgb_hljbpZ
l_evguo agZq_gbc fZkrlZ[Z hagZqZ_l k^\b] ^_kylbqghc lhqdb \ klhjhgm
klZjrbo jZajy^h\ GZijbf_j hij_^_e_gb_ NUMBER ( 7 , -3 ) hagZqZ_l hd
jm]e_gb_^hlukyq
DECIMAL b NUMERIC iheghklvx wd\b\Ze_glgu lbim
Tunu
NUMBER.
KbglZdkbk DECIMAL [lhqghklv [, fZkrlZ[@@, DEC [lhqghklv [,
fZkrlZ[@ NUMERIC [lhqghklv [,fZkrlZ[@@
Ijbf_juYDUFRXQWHU180%(5
Vardec1 DEC
vardec2 DEC (7)
vardec3 DECIMAL (7,3)
varnum NUMERIC
;blh\u_ kljhdb
Lbi RAW >Lhevdh ^ey Oracle] bkihevam_lky ^ey ojZg_gby [blh\uo
kljhdi_j_f_gghc^ebguHlebqb_lbiZ RAW hllbih\ CHAR, VARCHAR2
khklhbl \ lhf qlh ^ey lbih\ kbf\hevguo kljhd Oracle lhqg__ SQL*Net)
ijhba\h^blZ\lhfZlbq_kdh_ij_h[jZah\Zgb_^Zgguoijbboi_j_^Zq_f_`^m
deb_glhfbk_j\_jhf
KbglZdkbk RAW [^ebgZ].IZjZf_lj^ebgZbaf_jy_lky\[ZclZoFZd
kbfZevgh_agZq_gb_iZjZf_ljZ^ebgZ — 255[Zcl
Lbi LONG RAW >Lhevdh ^ey Oracle] bkihevam_lky ^ey ojZg_gby
[hevrbo[blh\uokljhdi_j_f_gghc^ebgu
KbglZdkbk LONG RAW[^ebgZ].IZjZf_lj^ebgZbaf_jy_lky\[ZclZo
?keb ^ebgZ kljhdb g_ mdZaZgZ y\gh hgZ iheZ]Z_lky jZ\ghc 2 f_]Z[ZclZf
FZdkbfZevgh_agZq_gb_iZjZf_ljZ^ebgZ — 2]b]Z[ZclZkbf\heh\>eyi_j_
f_gguolbiZ LONG RAWg_\hafh`ghihkljh_gb_bg^_dkZ
Ijbf_ju
Bit1 RAW(15)
verylongl LONG RAW( 100000)
2.4. Lbiu^ZlZb\j_fy
Lbi DATE>Lhevdh^ey Oracle]bkihevam_lky^eyojZg_gby^Zlub\j_
f_gbIh^^_j`b\Zxlky^Zluk 1yg\Zjy4712]^hgw^h 31^_dZ[jy 4712]
gw>eygZqZevgh]hijbk\Zb\Zgby^Zluh[uqghbkihevam_lkynmgdpby
LHBDATE
kbf\hevgZyBkljhdZB^Zlu
nhjfZlB^Zlu
Ijb hij_^_e_gbb
^Zlu [_a mlhqg_gby \j_f_gb ih mfheqZgbx ijbgbfZ_lky \j_fy ihemghqb
Nmgdpby SYSDATE ijbk\Zb\Z_l i_j_f_gghc l_dms__ agZq_gb_ ^Zlu b \j_
f_gb
KbglZdkbk: DATE.
Ijbf_j
birthday DATE
GZebqb_ ki_pbZevgh]h lbiZ ^ey ojZg_gby ^Zlu b \j_f_gb iha\hey_l
ih^^_j`b\Zlv ki_pbZevgmx Zjbnf_lbdm ^Zl b \j_f_g >h[Z\e_gb_ d i_j_
11
f_gghc lbiZ DATEp_eh]hqbkeZhagZqZ_lm\_ebq_gb_^ZlugZkhhl\_lkl\m
]hs__ qbkeh ^g_c Z \uqblZgb_ \uihegy_lky dZd hij_^_e_gb_ [he__ jZgg_c
^ZluJZkkfhljbfg_kdhevdhijbf_jh\
SQL > select sysdate from dual;
SYSDATE
15-NOV-98
SQL> select sysdate+20 "sysd+20" from dual;
sysd+20
05-DEC-98
SQL> select sysdate-20 "sysd-20" from dual;
sysd-20
26-OCT-98
3. L:;EBPU
3.1. Kha^Zgb_lZebp
LZ[ebpZ y\ey_lky [Zah\hc kljmdlmjhc j_eypbhgghc fh^_eb Ihegh_
bfylZ[ebpu\[Za_^Zgguokhklhblbabf_gbko_fudZdijZ\behkh\iZ^Zx
s_fkbf_g_fihevah\Zl_eybbf_gblZ[ebpu
Hi_jZlhjhij_^_e_gbylZ[ebpbf__lke_^mxsbckbglZdkbk
CREATE TABLE >bfyBko_fu@bfylZ[ebpu
(^h]jZgbq_gb_Bp_ehklghklbBlZ[ebpu IbfyBklhe[pZ
lbiB^ZgguoBklhe[pZ
['()$8/7\ujZ`_gb_@>h]jZgbq_gb_Bp_ehklghklbBklhe[pZ«@`«
[{ CLUSTERbfyBdeZkl_jZbfyBklhe[pZ>@I
{PCTFREE p_eh_ I PCTUSED p_eh_ I INITRANS p_eh_ I
MAXTRANS p_eh_ I
TABLESPACE bfy_lZ[ebqghc_h[eZklb I
6725$*(jZaf_jiZfylb,
RECOVERABLE I UNRECOVERABLE}} ...]
[PARALLEL\hafh`ghklvBiZjZee_evghcBh[jZ[hldb ]
{{ENABLEijh\_jy_fu_Bh]jZgbq_gbyBp_ehklghklb } ...]
[AS aZijhk]
[GACHE I NOCACHE]
Dexq_\h_keh\h DEFAULTmdZau\Z_lgZlhqlhijb\\h^_^Zgguokh
hl\_lkl\mxs_fmklhe[pm[m^_lijbk\h_ghagZq_gb_hij_^_e_ggh_i_j_f_g
ghc\ujZ`_gb__keb\hi_jZlhj_INSERTg_mdZaZghy\gh^jm]h_agZq_gb_
klhe[pZ Lbi ^Zgguo \ujZ`_gb_ ^he`_g khhl\_lkl\h\Zlv lbim ^Zgguo
12
klhe[pZb\ujZ`_gb_g_^he`ghkh^_j`ZlvkkuehdgZ^jm]b_\ujZ`_gby
Dexq_\h_ keh\h PCTFREE, PCTUSED, INITRANS, MAXTRANS,
TABLESPACE, STORAGE, RECOVERABLE, UNRECORECOVERABLE oZ
jZdl_jbamxlijhkljZgkl\hjZkij_^_ey_ijbjZ[hl_klZ[ebp_c
Dexq_\h_keh\h PCTFREEhij_^_ey_lijhp_glijhkljZgkl\Z[ehdZdh
lhjucj_a_j\bjm_lky^eyfh^bnbdZpbblZ[ebpu>himklbfu_agZq_gbyhl
^h 99. AgZq_gb_ ih mfheqZgbx 10, lh _klv ijb aZiheg_gbb dZ`^h]h [ehdZ
ijhkljZgkl\ZhklZ_lkyg_bkihevah\Zgguf
Dexq_\h_keh\h PCTUSEDhij_^_ey_lfbgbfZevgucijhp_glbkihev
ah\ZgbyijhkljZgkl\Z[ehdZijbdhlhjhf\g_]h\\h^ylky^Zggu_ihmfhe
qZgbx 40, lh _klv _keb \[ehd_aZgylhf_g__%ijhkljZgkl\Z\g_]h\\h
^ylky^Zggu_ijb\uiheg_gbbhi_jZpbb\klZ\db
JZkkfhljbf[Zam^Zgguoke_^mxs_ckljmdlmju
LZ[ebpZSTUDENTKlm^_gl
BIRTHSTUSURNAME NAME STIPEND KURS CITY
DAY
DENT_ID
UNIV_ID
STUDENT_ID –b^_glbnbdZlhjklm^_glZ
SURNAME –nZfbebyklm^_glZ
NAME –bfyklm^_glZ
STIPEND –klbi_g^bydhlhjmxihemqZ_lklm^_gl
KURS –dmjkgZdhlhjhfmqblkyklm^_gl
CITY –]hjh^\dhlhjhf`b\_lklm^_gl
BIRTHDAY –^ZlZjh`^_gbyklm^_glZ
UNIV_ID –b^_glbnbdZlhjmgb\_jkbl_lZ\dhlhjhfmqblkyklm^_gl
LZ[ebpZLECTUREIj_ih^Z\Zl_ev
LECTURE _ID SURNAME NAME CITY
UNIV_ID
LECTURE_ID –b^_glbnbdZlhjij_ih^Z\Zl_ey
SURNAME –nZfbebyij_ih^Z\Zl_ey
NAME –bfyij_ih^Z\Zl_ey
CITY –]hjh^\dhlhjhf`b\_lij_ih^Z\Zl_ev
UNIV_ID –b^_glbnbdZlhjmgb\_jkbl_lZ\dhlhjhfjZ[hlZ_lij_ih^Z\Zl_ev
13
LZ[ebpZSUBJECTIj_^f_lh[mq_gby
SUBJ_ID SUBJ_NAME HOUR SEMESTR
SUBJ_ID –b^_glbnbdZlhjij_^f_lZh[mq_gby
SUBJ_NAME –gZbf_gh\Zgb_ij_^f_lZh[mq_gby
HOUR –dhebq_kl\hqZkh\hl\h^bfuogZbamq_gb_ij_^f_lZ
SEMESTR –k_f_klj\dhlhjhfbamqZ_lky^Zggucij_^f_l
LZ[ebpZUNIVERSITY Mgb\_jkbl_lu
UNIV_ID
UNIV_NAME
RATING
CITY
UNIV_ID –b^_glbnbdZlhjmgb\_jkbl_lZ
UNIV_NAME –nZfbebyklm^_glZ
RATING –j_clbg]mgb\_jkbl_lZ
CITY –]hjh^\dhlhjhfjZkiheh`_gmgb\_jkbl_l
LZ[ebpZEXAM_MARKSWdaZf_gZpbhggu_hp_gdb
EXAM_ID STUDENT_ID SUBJ_ID MARK EXAM_DATE
EXAM_ID –b^_glbnbdZlhjwdaZf_gZ
STUDENT_ID –b^_glbnbdZlhjklm^_glZ
SUBJ_ID –b^_glbnbdZlhjij_^f_lZh[mq_gby
MARK –wdaZf_gZpbhggZyhp_gdZ
EXAM_DATE –^ZlZwdaZf_gZ
LZ[ebpZSUBJ_LECTMq_[gu_^bkpbiebguij_ih^Z\Zl_e_c
LECTURE _ID
SUBJ_ID
LECTURE _ID –b^_glbnbdZlhjij_ih^Z\Zl_ey
SUBJ_ID –b^_glbnbdZlhjij_^f_lZh[mq_gby
Yaud PL/SQL
Yaud PL/SQL y\ey_lky khklZ\ghc qZklvx \h fgh]bo ijh^mdlZo Oracle.
K_j\_j Oracle\dexqZ_lih^^_j`dmyaudZPL/SQL,ij_^hklZ\eyyihevah\Zl_
ex\hafh`ghklvkha^Z\Zlvbbkihevah\ZlvgZk_j\_j_ijhp_^mjubljb]]_ju
[Zau ^Zgguo \uihegyxsb_ aZ^Zqb dhgdj_lgh]h ijbeh`_gby Ijh]jZffu
kha^Zggu_ gZ yaud_ PL/SQL, fh]ml jZ[hlZlv kh\f_klgh \ jZaebqguo qZklyo
ijbdeZ^ghc kbkl_fu ihkljh_gghc gZ kj_^kl\ZoOracle.GZijbf_j\ijbeh
`_gbb bkihevamxs_f jZ[hlm k nhjfZfb ljb]]_j fh`_l \uau\Zlv ^ey \u
iheg_gbyg_dhlhjh]h^_ckl\byojZgbfmxijhp_^mjm
14
<kydZy ijh]jZffZ gZ PL/SQL khklhbl ba lj_o [ehdh\ [ehdZ hibkZgbc
bkihegbl_evgh]h [ehdZ b [ehdZ h[jZ[hldb bkdexqbl_evguo kblmZpbc Bk
ihegbl_evguc[ehdfh`_l[ulvkljmdlmjbjh\Zgkbkihevah\Zgb_fhi_jZlhj
guokdh[hdBEGINb END.
KbglZdkbq_kdbijh]jZffZgZ PL/SQLhnhjfey_lkyke_^mxsbfh[jZahf
DECLARE hi_jZlhju... BEGIN
hi_jZlhju... EXCEPTION
hi_jZlhju... END;
< [ehd_ DECLARE hibku\Zxlky i_j_f_ggu_ dhgklZglu b hij_^_ey_
fu_ihevah\Zl_e_flbiu^ZgguoI_j\uchi_jZlhj BEGINhlf_qZ_lgZqZeh
l_eZ hkgh\ghc ijh]jZffu < l_eh ijh]jZffu fh]ml [ulv \eh`_gu ^jm]b_
[ehdb h]jZgbq_ggu_ hi_jZlhjgufb kdh[dZfb BEGIN b END. < [ehd_
EXCEPTION hij_^_eyxlky njZ]f_glu ijh]jZffgh]h dh^Z ^ey h[jZ[hldb
bkdexqbl_evguokblmZpbc\ijh]jZff_Ihke_^gbchi_jZlhj ENDmdZau\Z_l
dhg_pl_eZijh]jZffu
< ex[u_ qZklb ijh]jZffu gZ PL/SQL fh`gh \dexqZlv dhff_glZjbb
L_dkldhlhjucgZqbgZ_lkykkbf\heh\ "--"bijh^he`Z_lky^hdhgpZl_dms_c
kljhdb jZkkfZljb\Z_lky dZd dhff_glZjbc KljhdZ gZqbgZxsZyky k dexq_
\h]hkeh\Z REM, lZd`_jZkkfZljb\Z_lkydZddhff_glZjbc
< [ehd_ ijh]jZffu PL/SQL, h]jZgbq_gghf hi_jZlhjZfb DECLARE b
BEGIN,hibku\Zxlkyi_j_f_ggu_bdhgklZgluEx[Zyi_j_f_ggZybebdhg
klZglZ ^he`gZ bf_lv h^bg ba ^himklbfuo \ Oracle lbih\ DhgklZglZ b^_g
lbnbpbjm_lky dexq_\uf keh\hf CONSTANT b hlebqZ_lky hl i_j_f_gghc
l_fqlhihiuldZbaf_gblv__agZq_gb_ijb\h^bldkhh[s_gbxh[hrb[d_
Ijbk\Zb\Zgb_agZq_gbci_j_f_ggufhkms_kl\ey_lkyhi_jZlhjhf ": =".
JZkkfhljbf ijbf_j ijhkl_cr_c ijh]jZffu \ dhlhjhc hij_^_eyxlky
i_j_f_ggu_ b \uihegyxlky ^_ckl\by ih \uqbke_gbx Exp 2 b 3. DhfZg^u
mklZgh\db i_j_f_gguo hdjm`_gby serveroutput b echo hij_^_eyxl j_`bf
\u\h^Z
gZ
l_jfbgZe
ihevah\Zl_ey
Kbkl_fgZy
ijhp_^mjZ
DBMS_OUTPUT.PUT_LINEh[_ki_qb\Z_l\u\h^^ZgguogZl_jfbgZeihev
ah\Zl_eyZnmgdpby Exp\uqbkey_lexKbf\he "/"mdZau\Z_lgZaZ\_jr_gb_
l_dklZ ijhp_^mju b y\ey_lky dhfZg^hc d bgl_jij_lZpbb b \uiheg_gbx
ijhp_^mju
IJBF?J 4.1.
SQL> set serveroutput on;
SQL> set echo on;
SQL> DECLARE
--\oh^
------- Arg -gZqZevgh_agZq_gb_
--\uoh^
-------Header1, Header2 -dhgklZglu^ey\uoh^Z
2 Header1 CONSTANT VARCHAR2(20) := ' Wdkihg_glZ ^\mo jZ\gZ ';
15
3 Header2 CONSTANT VARCHAR2(20) := Wdkihg_glZ lj_o jZ\gZ‘;
4 Arg NUMBER := 2; --a^_kvaZ^Z_lkygZqZevgh_agZq_gb_Zj]mf_glZ
5 -- Bkihegbl_evguc [ehd
6 BEGIN
7 DBMS_OUTPUT.PUT_LINE(Headerl II Exp (Arg) ) ;
8 Arg := Arg+l;
9 DBMS_OUTPUT.PUT_LINE (Header2 II Exp (Arg) ) ;
10 END;
11 /
MIJ:<E?GB?<UIHEG?GB?FIJH=J:FFU
Hi_jZlhju[hevrbgkl\Zyaudh\ijh]jZffbjh\Zgby\lhfqbke_byaudZ
PL/SQL, \uihegyxlky ihke_^h\Zl_evgh LZdZy ko_fZ gZau\Z_lky ihlhdhf
dhfZg^ < PL/SQL ij_^mkfhlj_gh g_kdhevdh hi_jZlhjh\ k ihfhsvx dhlh
juo fh`gh mijZ\eylv \uiheg_gb_f ijh]jZffu JZkkfhljbf khhl\_lkl\mxsb_ijh]jZffgu_dhgkljmdpbb
4.1.1. Hi_jZlhj\_l\e_gby
Hi_jZlhj IF. . .THEN. . .ELSEiha\hey_lijh\_jblvmkeh\b_b\aZ\b
kbfhklbhlj_amevlZlh\ijh\_jdb (TRUEbebFALSE),\uihegblvjZaebqgu_
]jmiiu hi_jZlhjh\ :evl_jgZlb\gZy ihke_^h\Zl_evghklv hi_jZlhjh\ hij_
^_ey_lky dexq_\uf keh\hf ELSE. =jZgbpu ^_ckl\by hi_jZlhjZ IF hij_^_eyxlky aZdju\Zxs_c hi_jZlhjghc kdh[dhc END IF. >ey jZkrbj_gby
kljmdlmju \_l\e_gby ^hihegbl_evgh ij_^mkfhlj_gu hi_jZlhjgu_ kdh[db
ELSIF,aZ^Zxsb_kljmdlmju\_l\e_gby[he__]em[hdh]hmjh\gy
Oraclebkihevam_lke_^mxsbckbglZdkbkdhgkljmdpbb\_l\e_gby\
PL/SQL:
IF mkeh\b_B
THEN hi_jZlhjuB; —\_l\v 1
ELSIFmkeh\b_B
THEN hi_jZlhju; —\_l\v
ELSIF
ELSE hi_jZlhjBn -hi_jZlhjuZevl_jgZlb\uEND IF;
H[jZlbl_\gbfZgb_qlhhi_jZlhj^hihegbl_evgh]h\_l\e_gbydh^bjm
_lky dexq_\uf keh\hf ELSIF Z g_ ELSEIF, dZd bgh]^Z ij_^iheZ]Zxl g_
hq_gv\gbfZl_evgu_ihevah\Zl_eb
JZkkfhljbf ijbf_j beexkljbjmxsbc f_oZgbaf \_l\e_gby \ ijh
]jZffZogZ PL/SQL.Ijh]jZffZ\u\h^blkhh[s_gb_hijbgZ^e_`ghklbx g_
dhlhjhfm bgl_j\Zem >ey \\h^Z ^Zgguo bkihevam_lky klZg^Zjlgh_ kh]eZr_
gb_ PL/SQL:i_j_f_ggZybfydhlhjhcij_^\Zjy_lkyagZdhf "&",\\h^blkyk
l_jfbgZeZihevah\Zl_ey
16
IJBF?J
SQL> DECLARE
--\oh^
- x-i_j_f_ggZygZ\oh^_
\uoh^
- Text1,Text2,Text3-kljhdb^ey\u\h^Z
2 x NUMBER; --i_j_f_ggZy
3 Textl VARCHAR2(30) :=
I_j_f_ggZy>= 10 ';
4 Text2 VARCHAR2(30) :=
I_j_f_ggZy\^bZihahg_hl^h ';
5 Text3 VARCHAR2(30) :=
I_j_f_ggZy<= 0 ';
6 --Bkihegbl_evguc[ehd
7 BEGIN
8 x := &lnput_Data;
9 DBMS_OUTPUT . PUT_LINE ( ‘ ‘);
10 IF (x > 10)
11 THEN DBMS_OUTPUT.PUT_LINE(Textl);
12 ELSIF (x < 0)
13 THEN DBMS_OUTPUT. PUT_LINE ( Text2 ) ;
14 END IF;
15 END;
16 /
HI?J:LHJPBDE:
Hj]ZgbaZpbypbdeZhnhjfey_lky\ijh]jZff_gZPL/SQLhi_jZlhjhf
LOOP.<uclbbapbdeZfh`ghg_kdhevdbfbkihkh[ZfbDhgkljmdpby EXIT
WHENh[_ki_qb\Z_l\uoh^bapbdeZijb\uiheg_gbbmkeh\by\khhl\_lkl
\mxs_fhi_jZlhj_JZkkfhljbfijbf_jhij_^_e_gbyqbkeZnZdlhjbZedh
lhjh]h y\ey_lky gZbf_gvrbf qbkehf [hevrbf aZ^Zgghc dhgklZglu gZ
ijbf_j 1 000 000 000).
IJBF?J 4.1.2.1
SQL> DECLARE
2 Arg NUMBER; --I_j_f_ggZy^ey\uqbke_gbynZdlhjbZeZ
3 I NUMBER; --I_j_f_ggZy-kq_lqbd
4 Limit NUMBER := 1000000000; --=jZgbqgh_agZq_gb_
5 Textl VARCHAR2(80) :==
NZdlhjbZeqbkeZ\i_j\u_ij_\urZxsbc
1 000 000 000 ';
6 --Bkihegbl_evguc[ehd
7 BEGIN
8 I :=l;
9 Arg := 1;
10 LOOP
17
11 EXIT WHEN ARG > Limit;
12 I :=I+1;
13 Arg := Arg* I;
14 END LOOP;
15 DBMS_OUTPUT. PUT_LINE ( Textl ) ;
16 DBMS_OUTPUT. PUT_LINE ( TO_CHAR ( Arg ) ) ;
17 DBMS_OUTPUT. PUT_LINE (‘Bkdhfh_ qbkeh = ‘ II TO_CHAR(I) );
18 END;
19 /
?s_h^gbfjZkijhkljZg_gguf\ZjbZglhfhj]ZgbaZpbbpbdeZy\ey_lky
pbde mijZ\ey_fuc dexq_\uf keh\hf WHILE. MijZ\e_gb_ lbiZ WHILE
h[_ki_qb\Z_l \uiheg_gb_ pbdeZ ^h l_o ihj, ihdZ mkeh\b_ hij_^_e_ggh_
dexq_\ufkeh\hfWHILE,y\ey_lkybklbgguf (TRUE).Fh^bnbpbjm_fij_
^u^msbcijbf_jbaf_gb\dhgklZglmbaZ^Z\mkeh\b_\uoh^ZbapbdeZdex
q_\ufkeh\hf WHILE.
IJBF?J 4.1.2.2.
SQL> DECLARE
2 Arg NUMBER; --I_j_f_ggZy^ey\uqbke_gbynZdlhjbZeZ
3 I NUMBER; --I_j_f_ggZy-kq_lqbd
4 Limit NUMBER := 1000000000000; --=jZgbqgh_agZq_gb_
5 Textl VARCHAR2(80) :=
NZdlhjbZeqbkeZ\i_j\u_ij_\urZxsbc
1 000 000 000 000 ';
6 --Bkihegbl_evguc[ehd
7 BEGIN
8 I:=l;
9 Arg := 1;
10 WHILE Arg < 1000000000000 LOOP
11 I:=I+1;
12 Arg := Arg* I;
13 END LOOP;
14 DBMS_OUTPUT.PUT_LINE(Textl);
15 DBMS_OUTPUT. PUT_LINE ( TO_CHAR ( Arg ) ) ;
16 DBMS_OUTPUT .PUT_LINE ('Bkdhfh_ qbkeh = II TO_CHAR(I) );
17 END;
18 /
NZdlhjbZeqbkeZ,\i_j\u_ij_\urZxsbc1 000 000 000 000
10461394944000 Bkdhfh_ qbkeh = 15
PL/SQL procedure successfully completed.
PbdemijZ\ey_fuchi_jZlhjhf FOR,bkihevam_lky\lhfkemqZ_dh]^Z
lhqghba\_klghkdhevdhjZagm`gh\uihegylvbl_jZpbxpbdeZJZkkfhljbf
ijbf_j jZkq_lZ nZdlhjbZeZ aZ^Zggh]h qbkeZ H[jZlbl_ \gbfZgb_ qlh i_j_
f_ggmxpbdeZhibku\Zlv\[ehd_ DECLAREg_gm`gh
18
IJBF?J 4.1.2.3.
SQL> DECLARE
2 Arg NUMBER := 1; --I_j_f_ggZy^ey\uqbke_gbynZdlhjbZeZ
3 Limit NUMBER := 20; --=jZgbqgh_agZq_gb_
4 Textl VARCHAR2(30) :=
NZdlhjbZeqbkeZ20 = ';
5 -- Bkihegbl_evguc [ehd
6 BEGIN
7 FOR I IN 1.. Limit LOOP
8 Arg := Arg* I;
9 END LOOP;
10 DBMS_OUTPUT.PUT_LINE(Textl I I TO_CHAR ( Arg ) ) ;
11 END;
12 /
4Hi_jZlhj GOTO
Hi_jZlhj i_j_oh^Z GOTO iha\hey_l hkms_kl\blv i_j_oh^ ih f_ld_
ijbkmlkl\mxs_c\l_e_ijh]jZffuKihfhsvxmgbdZevgh]hb^_glbnbdZlh
jZ aZdexq_ggh]h \ ^\hcgu_ m]eh\u_kdh[dbfh`ghihf_lblvex[mxqZklv
ijh]jZffu PL/SQL^eyhj]ZgbaZpbb[_amkeh\gh]hi_j_oh^Zihf_ld_
Dmjkhju
Dexq_\uf ihgylb_f yaudZ PL/SQL y\ey_lky dmjkhj Dmjkhj — wlh ih
bf_gh\Zgguc aZijhk kh^_j`Zsbc g_dhlhjh_ nbdkbjh\Zggh_ qbkeh kljhd \
\u[hjd_ QZs_ \k_]h dmjkhj kh^_j`bl ^Zggu_ h^ghc kljhdb \u[bjZ_fhc
lZ[ebpu Ih kms_kl\m dmjkhj y\ey_lky hdghf q_j_a dhlhjh_ ihevah\Zl_ev
ihemqZ_l ^hklmi d bgnhjfZpbb [Zau ^Zgguo Dmjkhju \ qZklghklb fh]ml
bkihevah\Zlvky ^ey ijbk\Zb\Zgby dhgdj_lguo agZq_gbc i_j_f_gguf ijh
]jZffu
JZkkfhljbfijbf_j^hklmiZdbgnhjfZpbbojZgbfhc\[Za_^Zgguok
bkihevah\Zgb_fdmjkhjh\Imklv\[Za_^ZgguoojZgblkylZ[ebpZ LECTURE,
CREATE
TABLE
LECTURE
knhjfbjh\ZggZy
ij_^eh`_gbyfb
(LECTURE_ID NUMBER, SURNAME VARCHAR2(30), NAME
VARCHAR2(10), CITY VARCHAR2(30), UNIV_ID NUMBER);
INSERT INTO LECTURE VALUES (1, 'B\Zgh\', 'B\Zg
<hjhg_`
INSERT INTO LECTURE 9$/8(6
I_ljh\
I_lj
Fhkd\Z
400 );
INSERT INTO LECTURE 9$/8(6 Kb^hjh\
Xjbc
<hjhg_`
Hibr_fdmjkhj Curl,hjb_glbjh\ZggucgZihemq_gb_^ZgguobalZ[eb
puLECTURE:
CURSOR Curl IS SELECT * FROM LECTURE ;
I_j\ufrZ]hfg_h[oh^bfuf^eyjZ[hlukdmjkhjhfy\ey_lkyhldjulb_
dmjkhjZdhlhjh_\uihegy_lkydhfZg^hc
19
OPEN Curl;
<u[hjdZ^ZgguobadmjkhjZfh`_l[ulv\uiheg_gZ\gZ[hji_j_f_gguo
ih^oh^ysbolbih\dhfZg^hc FETCH,gZijbf_jlZdbfh[jZahf
FETCH Curl INTO Argl, Arg2, Arg3, Arg4, Arg5;
Iheghklvx ijhp_^mjZ ihemq_gby ^Zgguo ba lZ[ebpu LECTURE ij_^
klZ\e_gZgb`_
IJBF?J 4.2.1.
SQL> set serveroutput on;
SQL> set echo on;
SQL> set termout on;
SQL> DECLARE
2 Argl NUMBER; -- I_j_f_ggZy ^ey i_j\h]h
Zj]mf_glZ
3 Arg2 VARCHAR2(30); --I_j_f_ggZy^ey
\lhjh]hZj]mf_glZ
4 Arg3 VARCHAR2(10); --I_j_f_ggZy^ey
lj_lv_]hZj]mf_glZ
5 Arg4 VARCHAR2(30); --I_j_f_ggZy^ey
q_l\_jlh]hZj]mf_glZ
6 Arg5 NUMBER; --I_j_f_ggZy^ey
iylh]hZj]mf_glZ
7 Cursor Curl IS SELECT * FROM LECTURE;
--Hij_^_e_gb_ dmjkhjZ
8 BEGIN
9 Open Curl; --Dmjkhj^he`_g[ulvhldjul
10 FOR I IN 1 ..3 LOOP
11 FETCH Curl INTO Argl,Arg2;
12 DBMS_OUTPUT.PUT_LINE(TO_CHAR(Argl)
13 END LOOP;
14 END;
15 /
<^Zgghcijh]jZff_g_m^ZqghmijZ\e_gb_kq_lqbdhfihkdhevdmpbde
gZkljh_ggZ ihemq_gb_dhgdj_lgh]hqbkeZkljhddhlhjuofh`_lbg_[ulv\
lZ[ebp_ < PL/SQL ^ey dmjkhjh\ ij_^mkfhlj_gu ki_pbZevgu_ f_lh^u
%NOTFOUND b %FOUND,ijbgbfZxsb_ijhlb\hiheh`gu_[me_\kdb_agZ
q_gby F_lh^ %oNOTFOUND \ha\jZsZ_l agZq_gb_ TRUE, _keb \u[hjdZ \
dmjkhjimklZylh_klvg_kh^_j`blkljhdbIhke_hldjulbydmjkhjZgh^h
i_j\hc dhfZg^u FETCH, f_lh^u FOUND, %NOTFOUND ijbgbfZxl g_
hij_^_e_ggh_ agZq_gb_ (unknown) G_agZgb_ wlh]h nZdlZ fh`_l ijb\_klb d
^hklZlhqghjZkijhkljZg_gghchrb[d_Ijbhj]ZgbaZpbbpbdeZkbkihevah\Z
gb_f hi_jZlhjZ WHILE b \uiheg_gb_f ijh\_jdb gZ bklbgghklv %FOUND
gZ \oh^_ pbde g_ [m^_l \uiheg_g gb jZam g_kfhljy gZ gZebqb_ ^Zgguo \
lZ[ebp_ F_lh^ %ROWCOUNT \ha\jZrZ_l qbkeh kljhd \u[jZgguo ihke_
hldjulbydmjkhjZ
20
Ihe_agh_ k\hckl\h k\yaZgh k ih^^_j`dhc iSH^RiSH^HeHggRUR f_lh^Z
%TYPE. Lbi i_j_f_gghc fh`_l [ulv hij_^_e_g dZd kh\iZ^Zxsbc k lbihf
Zljb[mlZ g_dhlhjhc lZ[ebpu Ijb wlhf ihevah\Zl_ex g_ lj_[m_lky lhqgh]h
agZgby lbiZ ^Zgguo Zljb[mlh\ aZibkb [he__ lh]h ijb hij_^_e_gguo baf_
g_gbyo\lbiZo^ZgguolZ[ebpuijh]jZffZhklZ_lkyjZ[hlhkihkh[ghc
< PL/SQL ih^^_j`b\Z_l lbi ^Zgguo RECORD, dhlhjuc iha\hey_l
kdhgkljmbjh\Zlv h[t_dl khhl\_lkl\mxsbc kljhd_ lZ[ebpu H[jZs_gb_ d
we_f_glZf h[t_dlZ lbiZ RECORD hkms_kl\ey_lky k ihfhsvx ghlZpbb
bfy_h[v_dlZbfy_we_f_glZ K mq_lhf ^hihegbl_evguo h[t_dlh\ b f_lh^h\
PL/SQL jZkkfhljbf gh\uc \ZjbZgl ijh]jZffu \u[hjdb kljhd lZ[ebpu
LECTURE c bkihevah\Zgb_f dmjkhjh\ H[jZlbl_ \gbfZgb_ gZ ih\lhjguc
\u\h^ ihke_^g_c kljhdb IhiulZcl_kv bkijZ\blv hj]ZgbaZpbx pbdeZ ^ey
mkljZg_gbyih\lhjgh]h\u\h^Z
IJBF?J 4.2.2.
SQL> set serveroutput on;
SQL> set echo on;
SQL> set tennout on;
SQL> DECLARE
2 TYPE Tabl_rec_type IS RECORD -- Hij_^_e_gb_ gh\h]h lbiZ ^Zgguo
3 (Argl LECTURE. LECTURE _ID%TYPE, -- I_j_f_ggZy lbiZ Zljb[mlZ
LECTURE_ID lZ[ebpu LECTURE
4 Arg2 LECTURE .SURNAME%TYPE, -- I_j_f_ggZy lbiZ Zljb[mlZ
SURNAME lZ[ebpu LECTURE
5 Arg3 LECTURE.NAME%TYPE , -- I_j_f_ggZy lbiZ Zljb[mlZ
NAME lZ[ebpu LECTURE
6 Arg4 LECTURE.CITY%TYPE , --I_j_f_ggZy lbiZ Zljb[mlZ
CITY lZ[ebpu LECTURE
7 Arg5 LECTURE.UNIV_ID%TYPE); -- I_j_f_ggZy lbiZ Zljb[mlZ
UNIV_ID lZ[ebpu LECTURE
8 TZb1B]_k Tabl_rec_type; --Hij_^_e_gb_h[t_dlZkdhgkljmbjh\Zggh]h
lbiZ
9 Cursor Curl IS SELECT * FROM LECTURE; --Hij_^_e_gb_ dmjkhjZ
10 BEGIN
11 Open Curl; --Dmjkhj^he`_g[ulvhldjul
12 FETCH Curl INTO Tabl_rec;
13 LOOP
14 EXIT WHEN (Curl%NOTFOUND);
15 DBMS_OUTPUT.PUT_LINE(Curl%ROWCOUNT II' 'IITabl_rec.
Arg2 II' 'IITabl_rec.Arg3 II' 'IITabl_rec.Arg4);
16 FETCH Curl INTO Tabl_rec;
17 END LOOP;
21
18 END;
19 /
Hi_jZlhj hij_^_e_gby dmjkhjZ fh`_l kh^_j`Zlv iZjZf_ljbq_kdbc aZ
ijhkAgZq_gbyiZjZf_ljZaZ^ZxlkyijbhldjulbbdmjkhjZ
JZkkfhljbfijbf_j\u[hjdb^ZgguokiZjZf_ljbq_kdbfaZijhkhfb hj
]ZgbaZpb_cpbdeZbkdexqZxs_cih\lhjguc\u\h^ihke_^g_ckljhdb
IJBF?J 4.2.3.
SQL> DECLARE
2 TYPE Tabl_rec_type IS RECORD -- Hij_^_e_gb_ gh\h]h lbiZ ^Zgguo
3 (Argl LECTURE. LECTURE _ID%TYPE, -- I_j_f_ggZy lbiZ Zljb[mlZ
LECTURE_ID lZ[ebpu LECTURE
4 Arg2 LECTURE .SURNAME%TYPE, -- I_j_f_ggZy lbiZ Zljb[mlZ
SURNAME lZ[ebpu LECTUR
5 Arg3 LECTURE.NAME%TYPE , -- I_j_f_ggZy lbiZ Zljb[mlZ
NAME lZ[ebpu LECTURE
6 Arg4 LECTURE.CITY%TYPE , --I_j_f_ggZy lbiZ Zljb[mlZ
CITY lZ[ebpu LECTURE
7 Arg5 LECTURE.UNIV_ID%TYPE); -- I_j_f_ggZy lbiZ Zljb[mlZ
UNIV_ID lZ[ebpu LECTURE
8 TZb1B]_k Tabl_rec_type; --Hij_^_e_gb_h[t_dlZkdhgkljmbjh\Zggh]h
lbiZ
9 Cursor Cur2(I NUMBER) IS SELECT * FROM LECTURE
WHERE CITY ¶<hjhg_`¶ --Hij_^_e_gb_dmjkhjZ
10 BEGIN
11 Open Cur2(2); --Dmjkhj^he`_g[ulvhldjul
12 FETCH Cur2 INTO Tab1_rec;
13 WHILE Cur2%FOUND LOOP
14 DBMS_OUTPUT.PUT_LINE(Curl%ROWCOUNT II' 'IITabl_rec.
Arg2 II' 'IITabl_rec.Arg3 II' 'IITabl_rec.Arg4);
15 FETCH Cur2 INTO Tabl_rec;
16 END LOOP;
17 END;
18 /
4.3. H[jZ[hldZbkdexqbl_evguokblmZpbc
;hevrbgkl\h jZa\bluo yaudh\ ijh]jZffbjh\Zgby h[eZ^Zxl \kljh_g
gufbf_oZgbafZfbh[jZ[hldbbkdexqbl_evguokblmZpbcKhhl\_lkl\mxsb_
yaudh\u_kj_^kl\Zij_^mkfhlj_gub\ PL/SQL.Ijb\hagbdgh\_gbb\kbkl_
f_ ij_^hij_^_e_gghc beb hibkZgghc ihevah\Zl_e_f kblmZpbb ijhbkoh^bl
Z\lhfZlbq_kdZyi_j_^ZqZmijZ\e_gby\gm`gucnjZ]f_gl[ehdZ EXCEPTION
ijh]jZffu gZ PL/SQL, ]^_ b ijhbkoh^bl ij_^mkfhlj_ggZy h[jZ[hldZ \ha
gbdr_cbkdexqbl_evghckblmZpbb
22
G_dhlhju_ ij_^hij_^_e_ggu_ bkdexqbl_evgu_ kblmZpbb PL/SQL
ij_^klZ\e_gu \ lZ[ebp_. Iheguc i_j_q_gv bkdexqbl_evguo kblmZpbc fh
`_l[ulvgZc^_g\jmdh\h^kl\_ihyaudm PL/SQL.
Kbf\hebq_kdh_bfyij_^hij_^_e_gghc HibkZgb_ ij_^hij_^_e_gghcbk
bkdexqbl_evghckblmZpbb
dexqbl_evghckblmZpbb
LOGIN_DENIED
G_mki_rgh_ ih^dexq_gb_ d k_j\_jm
gZijbf_j \\_^_g hrb[hqguc iZ
jhev
NOT_LOGGED_ON
IhiuldZ \uihegblv ^_ckl\b_ [_a
ih^dexq_gbyd k_j\_jm Oracle
INVALID_CURSOR
KkuedZgZg_^himklbfucdmjkhjbeb
g_^himklbfZyhi_jZpbykdmjkhjhf
1
2
NO_DATA_FOUND
G_ gZc^_gu ^Zggu_ khhl\_lkl\mx
sb_hi_jZlhjm SELECT INTO
DUP_VAL_ON_INDEX
IhiuldZ\klZ\blvagZq_gb_-^m[ebdZl
\ klhe[_p k h]jZgbq_gb_f gZ mgb
dZevghklvagZq_gby
TOO_MANY_ROWS
Hi_jZlhj SELECT INTO \ha\jZsZ_l
[he__h^ghckljhdb\i_j_f_ggmx
VALUE_ERROR
:jbnf_lbq_kdZy hrb[dZ hrb[dZ
ij_h[jZah\Zgbybebmk_q_gbb
JZkkfhljbf ijbf_jijh]jZffukh[jZ[hldhcbkdexqbl_evguokblmZ
pbc<l_dkl_ijh]jZffuijhims_ghi_jZlhjhldjulbydmjkhjZihwlhfmijb
h[jZs_gbb d f_lh^m % FOUND g_hldjulh]h dmjkhjZ \hagbdg_l bkdexqb
l_evgZy kblmZpby INVALID_CURSOR.
IJBF?J 4.3.1.
SQL> DECLARE
2 Argl LECTURE. LECTURE _ID%TYPE;
3 Arg2 LECTURE .SURNAME%TYPE;
4 Arg3 LECTURE.NAME%TYPE ;
5 Arg4 LECTURE.CITY%TYPE;
6 Arg5 LECTURE.UNIV_ID%TYPE;
7 Cursor Curl IS SELECT * FROM LECTURE;
23
8 BEGIN
9 FETCH Curl INTO Arg1, Arg2, Arg3, Arg4, Arg5;
10 WHILE Cur1%FOUND LOOP
11 FETCH Curl INTO Arg1, Arg2, Arg3, Arg4, Arg5;
12 END LOOP;
13 EXCEPTION
14 WHEN INVALID_CURSOR THEN
15 DBMS_OUTPUT.PUT_LINE(' Hrb[dZ ijbeh`_gby. Hehldjuldmjkhj ' ) ;
16 END;
17 /
Hrb[dZijbeh`_gby Hehldjuldmjkhj
>ey h[jZ[hldb bkdexqbl_evguo kblmZpbc g_ \oh^ysbo \ i_j_q_gv
klZg^Zjlguo fh`gh bkihevah\Zlv ci_pbZevguc h[jZ[hlqbd PL/SQL
OTHERSbebhibkZlvihevah\Zl_evkdmx bkdexqbl_evgmxkblmZpbxbaZijh
]jZffbjh\Zlv __ h[jZ[hldm Dexq_\h_ keh\h OTHERS [ehdZ EXCEPTION
hij_^_ey_l f_oZgbaf mgb\_jkZevghc h[jZ[hldb bkdexqbl_evguo kblmZpbc
g_\hr_^rbo\kibkhdkblmZpbch[jZ[Zlu\Z_fuoy\gh \[ehd_ EXCEPTION.
<\_^_f\l_dklijh]jZffuaZij_s_ggmxhi_jZpbx^_e_gbygZghevbh[jZ
[hlZ_f^Zggmxbkdexqbl_evgmxkblmZpbx\kibkd_ OTHERS.GZkZfhf^_
e_ \ Oracle ij_^hij_^_e_gZ bkdexqbl_evgZy kblmZpby ZERO_DIVIDE, gh \
^Zgghf ijbf_j_ wlh g_ \Z`gh Z \Z`gh lh qlh __ g_l \ kibkd_ [ehdZ
EXCEPTION.)
IJBF?J 4.3.2.
SQL> DECLARE
2 Argl LECTURE. LECTURE _ID%TYPE;
3 Arg2 LECTURE .SURNAME%TYPE;
4 Arg3 LECTURE.NAME%TYPE ;
5 Arg4 LECTURE.CITY%TYPE;
6 Arg5 LECTURE.UNIV_ID%TYPE;
7 Cursor Curl IS SELECT * FROM LECTURE;
8 Arg6 NUMBER := 1;
9 BEGIN
10 Arg6 := Arg6/0. 0;
11 WHILE Curl%FOUND LOOP
12 FETCH Curl INTO Argl,Arg2,Arg3, Arg4, Arg5;
13 END LOOP;
14 EXCEPTION
15 WHEN INVALID_CURSOR THEN
16 DBMS_OUTPUT.PUT_LINE( 'Hrb[dZ ijbeh`_gby. Hehldjul
dmjkhj
24
17 WHEN OTHERS THEN
18 DBMS_OUTPUT.PUT_LINE ('Hrb[dZ ijbeh`_gby. He^bZ]ghklb
jh\ZggZyhrb[dZ
19 END;
20 /
Bkdexqbl_evgZykblmZpbyhij_^_ey_fZyihevah\Zl_e_f^he`gZ[ulv
hibkZgZ\[ehd_DECLARE ijh]jZffuBkihevam_lkyke_^mxsbckbglZdkbk
hibkZgbybkdexqbl_evghckblmZpbb
BfyBbkdexqbl_evghcBkblmZpbbEXCEPTION;
< ijh]jZff_ mkeh\b_ \hagbdgh\_gby bkdexqbl_evghc kblmZpbb
hij_^_ey_lky klZg^Zjlgufb kj_^kl\Zfb h[uqgh hi_jZlhjZfb IF …THEN.
Ihke_h[gZjm`_gbymkeh\bc\hagbdgh\_gbybkdexqbl_evghckblmZpbbhgZ
]_g_jbjm_lkyhi_jZlhjhfRAISEdhlhjucbf__lke_^mxrbckbglZdkbk
RAISE BfyBbkdexqbl_evghckblmZpbb
Hi_jZlhj RAISE ]_g_jbjm_l bkdexqbl_evgmx kblmZpbx b i_j_^Z_l
mijZ\e_gb_ gZ khhl\_lkl\mxsbc h[jZ[hlqbd bkdexqbl_evghc kblmZpbb
dhlhjuc hij_^_eg \ [ehd_ EXCEPTION. < dZq_kl\_ ijbf_jZ \ jheb
bkdexqbl_evghc kblmZpbb jZkkfhljbf ij_\ur_gb_ agZq_gby Argl ihjh]Z
jZ\gh]h
IJBF?J 4.3.3.
SQL>
DECLARE
2 Argl LECTURE. LECTURE _ID%TYPE;
3 Arg2 LECTURE .SURNAME%TYPE;
4 Arg3 LECTURE.NAME%TYPE ;
5 Arg4 LECTURE.CITY%TYPE;
6 Arg5 LECTURE.UNIV_ID%TYPE;
7 Special_case EXCEPTION; -- Ihevah\Zl_evkdZybkdexqbl_evgZykb
lmZpby
8 Cursor Curl IS SELECT * FROM LECTURE ;
9 BEGIN
10 OPEN Curl;
11 FETCH Curl INTO Argl,Arg2,Arg3, Arg4, Arg5;
12 WHILE Curl%FOUND LOOP
13 FETCH Curl INTO Argl,Arg2,Arg3, Arg4, Arg5;
14 IF Argl > 20
15 THEN RAISE Special_case;
16 END IF;
17 END LOOP;
18 EXCEPTION
19 WHEN Special_case THEN
20 DBMS_OUTPUT.PUT_LINE('Ihevah\Zl_evkdZy
25
Bkdexqbl_evgZykblmZpby’);
21 WHEN OTHERS THEN
22 DBMS_OUTPUT.PUT_LINE('Orb[dZ ijbeh`_gby . He^b
Z]ghklbjh\ZggZyhrb[dZ
);
23 END;
24 /
AZ^Zgb_
1. K^_eZlv\u[hjdmbalZ[ebpuSTUDENT kbkihevah\Zgb_fdmjkhjZbpbd
eZ k f_lh^hf FOUND ^ey ihemq_gby ^Zgguo h klm^_glZo `b\msbo \
Fhkd\_
2. K^_eZlv\u[hjdmbalZ[ebpu SUBJECT kbkihevah\Zgb_fdmjkhjZbpbd
eZkf_lh^hfFOUND ^eyihemq_gby^Zgguohij_^f_lZo\h-hfk_f_
klj_
3. K^_eZlv\u[hjdmbalZ[ebpu UNIVERSITY kbkihevah\Zgb_fdmjkhjZb
pbdeZ k f_lh^hf FOUND ^ey ihemq_gby ^Zgguo h[ mgb\_jkbl_lZo k
j_clbg]hf[hevrbf
4. K^_eZlv\u[hjdmbalZ[ebpu EXAM_MARKS kbkihevah\Zgb_fdmjkhjZ
bpbdeZkf_lh^hfFOUND ^eyihemq_gby^Zgguo h[wdaZf_gZok^Zg
guo\^Zggmx^Zlm
5. K^_eZlv \u[hjdm ba lZ[ebpu SUBJ_LECT k bkihevah\Zgb_f dmjkhjZ b
pbdeZkf_lh^hfFOUND ^eyihemq_gby^Zgguohij_ih^Z\Zl_eyoqb
lZxsboij_^f_lk^Zggufghf_jhf
4.4. Kha^Zgb_ihevah\Zl_evkdboijhp_^mjbnmgdpbc
Ijhp_^mjubnmgdpbb —wlhh[t_dlu[Zau^Zgguob ke_^h\Zl_evghhgb
kha^ZxlkydhfZg^hc CREATEbmgbqlh`ZxlkydhfZg^hc DROP.Ijbkha^Z
gbbijhp_^mjubnmgdpbb ^he`gu[ulvhij_^_e_gubfyh[t_dlZi_j_q_gv
b lbi iZjZf_ljh\ b eh]bdZ jZ[hlu ijhp_^mju beb nmgdpbb hibkZggu_ gZ
yaud_ PL/SQL
Qlh[ukha^Zlvijhp_^mjmbebnmgdpbxg_h[oh^bfh bf_lvkbkl_fgu_
ijb\be_]bb CREATE PROCEDURE.>ey cha^Zgby ijhp_^mju nmgdpbb beb
iZd_lZ\ko_f_hlebqghc hl l_dms_c ko_fu ihevah\Zl_ey lj_[mxlky kbk
l_fgu_ijb\be_]bb CREATE ANY PROCEDURE. Ihke_hij_^_e_gbybf_gb
gh\hcijhp_^mjubebnmgdpbbg_h[oh^bfhaZ^Zlv__bf_gZlbiub\b^uiZ
jZf_ljh\ >ey dZ`^h]h iZjZf_ljZ ^he`_g [ulv mdZaZg h^bg ba \b^h\ iZjZ
f_ljZ — IN, OUTbeb IN OUT.<b^iZjZf_ljZ INij_^iheZ]Z_lqlhagZq_gb_
iZjZf_ljZ^he`gh[ulvhij_^_e_gh ijbh[jZs_gbbdijhp_^mj_bg_baf_
gy_lkyijhp_^mjhc
IhiuldZ baf_gblv \ l_e_ ijhp_^mju iZjZf_lj \b^Z IN ijb\_^_l d
khh[s_gbxh[hrb[d_<b^iZjZf_ljZ OUTij_^iheZ]Z_lbaf_g_gb_agZq_
26
gbyiZjZf_ljZ\ijhp_kk_jZ[hluijhp_^mjulh_klviZjZf_lj\b^ZHUL —
wlh \ha\jZsZ_fuc iZjZf_lj IZjZf_lj IN OUT — wlh iZjZf_lj dhlhjhfm
ijb\uah\_^he`gh[ulvijbk\h_ghagZq_gb_dhlhjh_fh`_l[ulvbaf_g_gh
\ l_e_ ijhp_^mju IZjZf_lju ijhp_^mj beb nmgdpbc bf_xl \b^u ijbk\h
_ggu_ihmfheqZgbx
>hihegbl_evghdhij_^_e_gbyfg_h[oh^bfuf^eyijhp_^mju\hij_
^_e_gbb nmgdpbb ^he`_g [ulv mdZaZg lbi ^Zgguo _^bgkl\_ggh]h \ha\jZ
sZ_fh]hnmgdpb_cagZq_gby<ha\jZlagZq_gbynmgdpbb\uihegy_lkydhfZg
^hc PL/SQL RETURN. Hi_jZlhj hij_^_e_gby ijhp_^mju Oracle bkihevam_l
ke_^mxsbckbglZdkbk
CREATE [OR REPLACE] PROCEDURE
[bfyBko_fu ] bfyBijhp_^mju
[(bfy_iZjZf_ljZ [{IN I OUT I IN OUT}] lbi_^Zgguo
[,bfy_iZjZf_ljZ [{IN I OUT I IN OUT}] lbi_^Zgguo...])]
{IS I AS}
QSR]SDffDBgDB3/64/
Dexq_\h_ keh\h OR REPLACE mdZau\Z_l gZ [_amkeh\gh_ aZf_s_gb_
klZjh]hl_dklZijhp_^mju?kebdexq_\h_keh\h OR REPLACEg_mdZaZghb
ijhp_^mjZ hij_^_e_gZ lh aZf_s_gby klZjh]h agZq_gby dh^Z ijhp_^mju g_
ijhbkoh^blb\ha\jZsZ_lkykhh[s_gb_h[hrb[d_
< hibkZgbb i_j_f_gguo ijhp_^mju g_ bkihevam_lky dexq_\h_ keh\h
DECLARE. ;ehd hij_^_e_gby ^Zgguo gZqbgZ_lky kjZam ihke_ dexq_\h]h
keh\ZASbeb IS,ih\u[hjmihevah\Zl_ey
JZkkfhljbf ijbf_j kha^Zgby ijhp_^mju dhlhjZy aZghkbl \ lZ[ebpm
agZq_gby aZ\bkysb_ hl qbkeh\h]h iZjZf_ljZ Imklv lZ[ebpZ knhjfbjh\ZgZ
ij_^eh`_gb_f
CREATE TABLE SUBJ_LECT(LECTURE_ID NUMBER, SUBJ_ID
NUMBER);
Ijhlhdhekha^Zgbyijhp_^mjuij_^klZ\e_g^Ze__
IJBF?J 4.4.1.
SQL> CREATE OR REPLACE PROCEDURE InsRec
2 (Argl IN NUMBER, Arg2 IN NUMBER)
3 AS
4 Coeff CONSTANT NUMBER := 0.5;
5 BEGIN
6 INSERT INTO SUBJ_LECT VALUES (Coeff*Argl, Coeff*Arg2 );
7 END;
8/
Bkiheg_gb_kha^Zgghcijhp_^mju InsRecfh`_l[ulv\uiheg_ghhi_jZ
27
lhjhf?O?KyaudZ PL/SQL.Ihke_^mxsZy\u[hjdZbalZ[ebpuSUBJ_LECT
beexkljbjm_lbaf_g_gby\[Za_^Zgguohkms_kl\e_ggu_\uah\hfijhp_^m
ju InsRec.
SQL> exec InsRec (240,120);
Qlh[u mlhqgblv \uy\e_ggu_ \ ijhp_kk_ kbglZdkbq_kdh]h ZgZebaZ
hrb[dbfh`gh\hkihevah\ZlvkydhfZg^hc PL/SQL SHOW ERRORS.WlZ dh
fZg^Z ihdZau\Z_l hrb[db, h[gZjm`_ggu_ \ ijhp_kk_ \uiheg_gby CREATE
PROCEDURE, CREATE
FUNCTION, CREATE PACKAGE, CREATE
PACKAGE BODY b CREATE TRIGGER. ?kebdhfZg^Z SHOW ERRORSbk
ihevam_lky[_aiZjZf_ljh\lh\ha\jZsZxlkyhrb[dbihke_^g_cdhfibebjh
\Zgghcijhp_^mjunmgdpbbiZd_lZl_eZiZd_lZbebljb]]_jZ
JZkkfhljbfijbf_jh[gZjm`_gbybbkijZ\e_gbyhrb[db<ijhp_^mj_
ij_^klZ\e_gghc\ur_,^h[Z\bfhrb[hqguchi_jZlhjbaf_gyxsbcagZq_gb_
iZjZf_ljZ\b^ZINdhlhjucg_^he`_gbaf_gylvky
IJBF?J 4.4.2.
SQL> CREATE OR REPLACE PROCEDURE InsRec
2 (Argl IN NUMBER, Arg2 IN NUMBER)
3 AS
4 Coeff CONSTANT NUMBER := 0.5;
5 BEGIN
6 Arg1:=Arg1 + 200;
7 INSERT INTO SUBJ_LECT VALUES (Coeff*Argl, Coeff*Arg2 );
8 END;
9/
SQL> show errors
Errors for PROCEDURE INSREC:
LINE/COL ERROR
6/1 PLS-00363: expression 'ARGl' cannot be used as an assignment target
6/1 PL/SQL: Statement ignored
GZihfgbf qlh nmgdpbb PL/SQL hlebqZxlky hl ijhp_^mj l_fqlh\ha
\jZsZxl\\uau\Zxsmxkj_^magZq_gb_iZjZf_ljZ
Hi_jZlhj hij_^_e_gby nmgdpbb Oracle bkihevam_l ke_^mxsbc kbglZd
kbk
CREATE [OR REPLACE] FUNCTION
[bfyBko_fu]bfyBnmgdpbb
[(bfyBiZjZf_ljZ [{IN I OUT I INOUT}] lbiB^Zgguo
[bfyBiZjZf_ljZ [{IN I OUT I INOUT}] lbiBB^Zgguo ...])]
RETURN lbi_^Zgguo
{IS I AS}
QSR]SDffDBQDB3/64/
HibkZgb_lbiZ^Zgguo^ey\ha\jZsZ_fh]hnmgdpb_cagZq_gbylj_[m
28
_lkyh[yaZl_evgh IjbhibkZgbbi_j_f_gguonmgdpbblZd`_dZdbijb hib
kZgbbi_j_f_gguoijhp_^mjug_bkihevam_lkydexq_\h_ keh\h DECLARE.
;ehdhij_^_e_gby^ZgguogZqbgZ_lkykjZam ihke_dexq_\h]hkeh\Z ISbeb
AS,ih\u[hjmihevah\Zl_ey
JZkkfhljbfijbf_jkha^ZgbynmgdpbbdhlhjZy\uqbkey_lkmffmagZ
q_gbc Zljb[mlh\ lZdbo qlh h^bg ba Zljb[mlh\ ihiZ^Z_l \ aZ^Zgguc iZjZ
f_ljZfbnmgdpbbbgl_j\ZeImklvlZ[ebpZ knhjfbjh\ZgZij_^eh`_gb_f
IJBF?J 4.4.3.
SQL> CREATE OR REPLACE FUNCTION SumRecInt
2 (Argl IN NUMBER, Arg2 IN NUMBER)
3 RETURN NUMBER
4 AS
5 Sum_Var NUMBER := 0.0;
6 BEGIN
7 SELECT Sum(LECTURE_ID) INTO Sum_Var FROM SUBJ_LECT WHERE
SUBJ_ID BETWEEN Argl AND Arg2;
8 RETURN Sum_Var;
9 END;
10 /
Function created.
?keb oZjZdl_j bkihevah\Zgby ijbeh`_gbc baf_gbeky lh ^ey hk\h[h`
^_gby j_kmjkh\ [Zau ^Zgguo fh`_l ihlj_[h\Zlvky mgbqlh`blv ijhp_^mjm
beb nmgdpbx < kh[kl\_gghc ko_f_ ihevah\Zl_ex g_ lj_[mxlky ^hihegb
l_evgu_ijb\be_]bb^eymgbqlh`_gbyijhp_^mjubebnmgdpbb>eymgbqlh`_gby ijhp_^mju beb nmgdpbb \ ko_f_ ^jm]h]h ihevah\Zl_ey g_h[oh^bfh
gZebqb_ijb\be_]bb DROP ANY PROCEDURE.
>eymgbqlh`_gbyijhp_^mju Oraclebkihevam_lke_^mxsbckbglZdkbk
DROP PROCEDURE [bfyBko_fu]bfyBijhp_^mju
JZkkfhljbfijbf_jmgbqlh`_gbynmgdpbb Oracle.
SQL > DROP FUNCTION SumRecInt
Function dropped;
AZ^Zgb_ 2
1. HibkZlvijhp_^mjmdhlhjZyaZghkbl^Zggu_\lZ[ebpm STUDENT \aZ\b
kbfhklbhliZjZf_ljh\ijhp_^mju\ua\Zlvwlmijhp_^mjm
2. HibkZlv ijhp_^mjm dhlhjZy aZghkbl ^Zggu_ \ lZ[ebpu STUDENT b
EXAM_MARKSkkh[ex^_gb_fkkuehqghcp_ehklghklb\hkihevah\Zlvky
_c\aZ\bkbfhklbhliZjZf_ljh\
3. HibkZlv ijhp_^mjm dhlhjZy aZghkbl ^Zggu_ \ lZ[ebpu STUDENT b
SUBJECT k kh[ex^_gb_f kkuehqghc p_ehklghklb \hkihevah\Zlvky _c \
aZ\bkbfhklbhliZjZf_ljh\
29
4. HibkZlv ijhp_^mjm dhlhjZy aZghkbl ^Zggu_ \ lZ[ebpu STUDENT b
UNIVERSITYkkh[ex^_gb_fkkuehqghcp_ehklghklb\hkihevah\Zlvky_c
\aZ\bkbfhklbhliZjZf_ljh\
5. HibkZlvijhp_^mjmdhlhjZyaZghkbl^Zggu_\lZ[ebpmLECTURE \aZ\b
kbfhklbhliZjZf_ljh\ijhp_^mju\ua\Zlvwlmijhp_^mjm
6. HibkZlv b \ua\Zlv nmgdpbx dhlhjZy \uqbkey_l kmffm [Zeeh\ ^ey
klm^_glh\ ghf_jZ dhlhjuo gZoh^ylky \ aZ^Zgghf bgl_j\Ze_ \ lZ[ebp_
EXAM_MARKS.
7. HibkZlv b \ua\Zlv nmgdpbx dhlhjZy \uqbkey_l kmffm [Zeeh\ \
g_dhlhjuc^_gvih^Zgghfmij_^f_lm\lZ[ebp_EXAM_MARKS.
8. HibkZlv b \ua\Zlv nmgdpbx dhlhjZy \uqbkey_l ^ey klm^_glh\ ghf_jZ
dhlhjuogZoh^ylky\^Zgghf^bZihahg_fZdkbfZevguc[ZeeihaZ^Zgghfm
ij_^f_lmkg_dhlhjufghf_jhf\lZ[ebp_EXAM_MARKS.
9. HibkZlv b \ua\Zlv nmgdpbx dhlhjZy hij_^_ey_l ^ey klm^_glh\ k
aZ^Zgghc nZfbeb_c kmffm [Zeeh\ ih aZ^Zgghfm ij_^f_lm \ lZ[ebp_
EXAM_MARKS.
4.5. IZd_lu PL/SQL
Ijhp_^mjunmgdpbbb]eh[Zevgu_i_j_f_ggu_h[t_^bg_ggu_h[sbf
nmgdpbhgZevguf aZfukehf qZklh hnhjfeyxl \ \b^__^bgh]hh[t_dlZ[Zau
^Zgguo — iZd_lZHkh[_gghklvxiZd_lh\PL/SQLy\ey_lkyjZa^_evgZydhf
ibeypby b ojZg_gb_ bgl_jn_ckghc b bkihegbl_evghc qZkl_c iZd_lZ IZd_l
dZdh[t_dlkhklhblba^\moqZkl_cki_pbnbdZpbbiZd_lZbl_eZiZd_lZ<
ki_pbnbdZpbbiZd_lZojZgblkyhibkZgb_ijhp_^mjnmgdpbc]eh[Zevguoi_
j_f_gguo dhgklZgl b dmjkhjh\ dhlhju_ ^hklmigu ^ey \g_rgbo ijbeh`_
gbc < l_e_ iZd_lZ hij_^_eyxlky \k_ ijhp_^mju nmgdpbb b i_j_f_ggu_
\dexqZy l_ dhlhju_ g_ [ueb hij_^_e_gu \ ki_pbnbdZpbb iZd_lZ Ijhp_^mjunmgdpbbbi_j_f_ggu_hij_^_e_ggu_\l_e_iZd_lZghg_hibkZggu_
\_]hki_pbnbdZpbby\eyxlkyehdZevgufb<g_rgb_ihhlghr_gbxdiZd_lm
ijbeh`_gby g_ bf_xl ijZ\Z gZ bkihevah\Zgb_ ehdZevguo h[t_dlh\ iZd_lZ
EhdZevgu_h[t_dluij_^gZagZq_gubkdexqbl_evgh^eybkihevah\Zgbylhev
dhijhp_^mjZfbbnmgdpbyfbkZfh]hiZd_lZ
Hkh[_gghklvx iZd_lh\ PL/SQL y\ey_lky ih^^_j`dZ i_j_]jm`Z_fuo
nmgdpbcbijhp_^mjIjhp_^mjubebnmgdpbbfh]mlbf_lvh^bgZdh\h_bfy
ghjZaebqgucihlbimbebdhebq_kl\mgZ[hjZj]mf_glh\<fhf_glh[jZs_
gbyddhgdj_lghcijhp_^mj_bebnmgdpbbihqbkemblbimi_j_^Z\Z_fuoZj
]mf_glh\ Z\lhfZlbq_kdb hij_^_ey_lky lj_[m_fZy ijhp_^mjZ beb nmgdpby
dhlhjZy b bkihegy_lky Ih^^_j`dZ i_j_]jm`Z_fuo ijhp_^mj \ qZklghklb
bkihevam_lky \ klZg^Zjlghf iZd_l_ DBMS_OUTPUT ^ey _^bghc nhjfu h[
jZs_gbydijhp_^mj_ PUT_LINE^ey\u\h^Z^ZgguojZaebqguolbih\
GZihfgbfqlh^eykha^ZgbyiZd_lZihevah\Zl_ev^he`_gbf_lvijb\b
e_]bx CREATE PROCEDURE.Kha^Zgb_iZd_lZ\ko_f_^jm]h]hihevah\Zl_
eylj_[m_lgZebqbyijb\be_]bb CREATE ANY PROCEDURE.
Hi_jZlhj hij_^_e_gby bgl_jn_ckghc qZklb ki_pbnbdZpbb iZd_lZ
Oraclebkihevam_lke_^mxsbckbglZdkbk
30
CREATE [OR REPLACE] PACKAGE [bfy_ko_fu.]bfy_iZd_lZ
{IS I AS}
ki_pbnbdZpbyBiZd_lZBgZBPL/SQL
Dexq_\h_ keh\h OR REPLACE mdZau\Z_l gZ [_amkeh\gh_ aZf_s_gb_
klZjh]hl_dklZki_pbnbdZpbbiZd_lZ?kebdexq_\h_keh\h OR REPLACEg_
mdZaZghbiZd_lhij_^_e_g\kbkl_f_lhaZf_s_gbyklZjh]hagZq_gbyki_pb
nbdZpbbiZd_lZg_ijhbkoh^blb\ha\jZsZ_lkykhh[s_gb_h[hrb[d_Ki_
pbnbdZpbyiZd_lZgZqbgZ_lkykhibkZgbydhgklZglbi_j_f_gguoIjbhib
kZgbbi_j_f_gguoiZd_lZdexq_\h_keh\h DECLAREg_bkihevam_lky
JZkkfhljbfijbf_jkha^Zgbyki_pbnbdZpbbiZd_lZdhlhjZykhklhbl
bahibkZgbydhgklZglunmgdpbbbijhp_^mju
IJBF?J 4.5.1.
SQL> CREATE OR REPLACE PACKAGE PAC
2 AS
3 PAC_CONST CONSTANT NUMBER := 20;
4 FUNCTION MUL(Argl NUMBER, Arg2 NUMBER)
5 RETURN NUMBER;
6 PROCEDURE AUDIT;
7 END;
8/
Hi_jZlhjhij_^_e_gbybkihegbl_evghcqZklbl_eZiZd_lZ Oraclebk
ihevam_lke_^mxsbckbglZdkbk
CREATE [OR REPLACE] PACKAGE BODY
[bfyBko_fu]bfyBiZd_lZ
{IS I AS}
FQHpbnbdZpbyBQDdHPDBgDB3/64/
Dexq_\h_ keh\h OR REPLACE mdZau\Z_l gZ [_amkeh\gh_ aZf_s_gb_
klZjh]hl_dklZl_eZiZd_lZ?kebdexq_\h_ ; keh\h OR REPLACEg_mdZaZgh
biZd_lhij_^_e_g\kbkl_f_lhaZf_s_gbyklZjh]hagZq_gbyl_eZiZd_lZg_
ijhbkoh^blb\ha\jZsZ_lkykhh[s_gb_h[hrb[d_
Hij_^_e_gb_ l_eZ iZd_lZ gZqbgZ_lky k hibkZgby dhgklZgl b i_j_f_g
guoDhgklZglubi_j_f_ggu_hibkZggu_\ki_pbnbdZpbbiZd_lZy\eyxlky
]eh[Zevgufb b \ l_e_ iZd_lZ ih\lhjgh g_ hibku\Zxlky IjbhibkZgbbdhg
klZglbi_j_f_gguoiZd_lZdexq_\h_keh\h DECLAREg_bkihevam_lky
JZkkfhljbfijbf_jkha^Zgbyl_eZiZd_lZki_pbnbdZpbydhlhjh]hijb
\_^_gZ\ur_.ImklvnmgdpbyiZd_lZ MUL\uihegy_lmfgh`_gb_Zj]mf_glh\
gZdhgklZglmiZd_lZZijhp_^mjZ AUDITnbdkbjm_lnZdlh[jZs_gbydnmgd
pbb MULaZibkvx\lZ[ebpmagZq_gbykq_lqbdZh[jZs_gbcbl_dms_c^Zlu
Ij_^iheZ]Z_lky qlh lZ[ebpZ TabAUD k khhl\_lkl\mxsbfb lbiZfb ^Zgguo
31
Zljb[mlh\dfhf_glmkha^Zgbyl_eZiZd_lZkha^ZgZIjhlhdhekha^Zgbyl_eZ
iZd_lZijb\_^_ggb`_
IjbhibkZgbbnmgdpbcbijhp_^mjiZd_lZ\hlebqb_hlhibkZgbch^b
ghqguonmgdpbcbijhp_^mjhi_jZlhj CREATEg_bkihevam_lky
IJBF?J 4.5.2.
SQL> CREATE OR REPLACE PACKAGE BODY PAC
2 AS
3 PAC_COUNT NUMBER := 0;
4 FUNCTION MUL(Argl NUMBER, Arg2 NUMBER)
5 RETURN NUMBER IS
6
BEGIN
7
AUDIT;
8
RETURN Arg1* PAC_CONST + Arg2*PAC_CONST;
9
END;
10 PROCEDURE AUDIT IS
11 BEGIN
12
PAC_COUNT := PAC_COUNT + 1;
13
INSERT INTO TabAUD
VALUES ( PAC_COUNT, SYSDATE ) ;
14
COMMIT;
15
END;
16 END;
17 /
Package body created.
DhgklZglZbebi_j_f_ggZyhibkZggZy\ki_pbnbdZpbbiZd_lZfh`_l
[ulv ^hklmigZ ba ihevah\Zl_evkdhc ijh]jZffu dhg_qgh _keb ijhp_^mj_
bebnmgdpbblZdhc^hklmijZaj_r_gQlh[uh[jZlblvkyd]eh[Zevghci_j_
f_gghcbebdhgklZgl_iZd_lZgm`ghmdZaZlv\dZq_kl\_ij_nbdkZbfyiZd_
lZ Gb`_ ijb\_^_g ijbf_j beexkljbjmxsbc \hafh`ghklv ^hklmiZ d ]eh
[Zevghc dhgklZgl_ iZd_lZ b g_\hafh`ghklv ^hklmiZ d qZklghc i_j_f_gghc
iZd_lZ
SQL>EXEC DBMS_OUTPUT.PUT_LINE(PAC.PAC_CONST);
20.0
PL/SQL procedure successfully completed.
SQL>EXEC DBMS_OUTPUT.PUT_LINE ( PAC.PAC_COUNT ) ;
begin
dbms_output.put_line (pac. pac_count) ;
end;
ERROR at line 1;
32
ORA-06550: line I, column 34:
PLS-00302: component 'PAC_COUNT' must be declared
ORA-06550: line I, column 7:
PL/SQL: Statement ignored
Qlh[u\ua\Zlvijhp_^mjmbebnmgdpbxiZd_lZ\\uah\_gm`ghmdZaZlv
\dZq_kl\_ij_nbdkZbfyiZd_lZ
<aZdexq_gb_jZa^_eZjZkkfhljbfijbf_jbkihevah\Zgbynmgdpbbkha
^Zggh]hiZd_lZ
SQL>EXEC DBMS_OUTPUT.PUT_LINE(PAC.MUL(lll,222));
PL/SQL procedure successfully completed.
Ijb bkihevah\Zgbb i_j_f_gguo iZd_lZ bgbpbZebaZpby ehdZevguo i_
j_f_gguo iZd_lZ ijhbkoh^bl ijb aZimkd_ k_j\_jZ Oracle. < ^Zgghf kemqZ_
ihke_ hklZgh\Z b ih\lhjgh]h aZimkdZ k_j\_jZ kq_lqbd h[jZs_gbc
PAC_COUNT[m^_lmklZgh\e_g\gme_\h_khklhygb_?kebihkfukemj_rZ_
fhcaZ^Zqblj_[m_lkyg_aZ\bkbfh_hlhklZgh\h\k_j\_jZijbjZs_gb_kq_lqb
dZfh`gh \hkihevah\ZlvkylZdbfh[t_dlhfdZdihke_^h\Zl_evghklv
>eyhk\h[h`^_gbyj_kmjkh\k_j\_jZfh`_lihlj_[h\Zlvkymgbqlh`blv
iZd_l < kh[kl\_gghc ko_f_ ihevah\Zl_ex g_ lj_[mxlky ^hihegbl_evgu_
ijb\be_]bb^eymgbqlh`_gbyiZd_lZ>eymgbqlh`_gbyiZd_lZ\ko_f_^jm]h
]hihevah\Zl_eyg_h[oh^bfZijb\be_]by DROP ANY PROCEDURE.
>eymgbqlh`_gbyki_pbnbdZpbbiZd_lZbl_eZiZd_lZ Oraclebkihevam
_lke_^mxsbckbglZdkbk
DROP PACKAGE [BODY] [bfyBko_fu.]bfyBiZd_lZ
G_h[yaZl_evgh_dexq_\h_keh\h BODYmdZau\Z_lqlh mgbqlh`Z_lkylhevdh
l_ehiZd_lZ?kebdexq_\h_keh\h BODYhims_ghlhm^Zey_lkybki_pbnb
dZpbybl_ehiZd_lZIZjZf_ljbfyBiZd_lZaZ^Z_lbfymgbqlh`Z_fh]hiZd_
lZIjbf_jmgbqlh`_gbyiZd_lZjZkkfZljb\Z_lkygb`_
SQL > DROP PACKAGE PAC;
Package dropped,
AZ^Zgb_
1. Kha^ZlviZd_lkhklhysbcbanmgdpbbkiZjZf_ljZfbijhp_^mju[_aiZ
jZf_ljh\ Nmgdpby ih^kqblu\Z_l dhebq_kl\h klm^_glh\ ihemqZxsbo
klbi_g^bx aZ^Zggmx iZjZf_ljhf Ijhp_^mjZ ih^kqblu\Z_l dhebq_kl\h
h[jZs_gbcdnmgdpbbbaZghkblwlhdhebq_kl\h\_ebqbgmklbi_g^bbdh
ebq_kl\h klm^_glh\ ihemqZxsbo \ __ \gh\mxlZ[ebpmkha^ZggmxaZjZ
g__
2. Kha^ZlviZd_lkhklhysbcbanmgdpbbkiZjZf_ljZfbijhp_^mju[_aiZ
jZf_ljh\Nmgdpbyih^kqblu\Z_ldhebq_kl\hklm^_glh\`b\msbo\]hjh
^_ aZ^Zgghf iZjZf_ljhf Ijhp_^mjZ ih^kqblu\Z_l dhebq_kl\h h[jZs_
gbc d nmgdpbb b aZghkbl wlh dhebq_kl\h gZa\Zgb_ ]hjh^Z dhebq_kl\h
33
3.
4.
5.
6.
klm^_glh\`b\msbo\wlhf]hjh^_\gh\mxlZ[ebpmkha^ZggmxaZjZg__.
Kha^ZlviZd_lkhklhysbcbanmgdpbbkiZjZf_ljZfbijhp_^mju[_aiZ
jZf_ljh\Nmgdpbyih^kqblu\Z_ldhebq_kl\hij_^f_lh\ihdhlhjufih
emq_ghhp_gdZaZ^ZggZyiZjZf_ljhf[he__q_fmq_eh\_dIjhp_^mjZ
ih^kqblu\Z_ldhebq_kl\hh[jZs_gbcdnmgdpbbbaZghkblwlhdhebq_kl\h
\_ebqbgmhp_gdbbdhebq_kl\hij_^f_lh\\gh\mxlZ[ebpmkha^ZggmxaZ
jZg__
Kha^ZlviZd_lkhklhysbcbanmgdpbbkiZjZf_ljZfbijhp_^mju[_aiZ
jZf_ljh\Nmgdpbyih^kqblu\Z_ldhebq_kl\hmgb\_jkbl_lh\kj_clbg]hf
aZ^ZggufiZjZf_ljhfIjhp_^mjZih^kqblu\Z_ldhebq_kl\hh[jZs_gbcd
nmgdpbb b aZghkbl wlh dhebq_kl\h \_ebqbgm j_clbg]Z dhebq_kl\h mgb
\_jkbl_lh\kwlbfj_clbg]hf\gh\mxlZ[ebpmkha^ZggmxaZjZg__
Kha^ZlviZd_lkhklhysbcbanmgdpbbkiZjZf_ljZfbijhp_^mju[_aiZ
jZf_ljh\ Nmgdpby ih^kqblu\Z_l dhebq_kl\h ij_ih^Z\Zl_e_c jZ[hlZx
sbo\mgb\_jkbl_l_aZ^ZggufiZjZf_ljhfIjhp_^mjZih^kqblu\Z_ldh
ebq_kl\hh[jZs_gbcdnmgdpbbbaZghkblwlhdhebq_kl\hghf_jmgb\_j
kbl_lZdhebq_kl\hij_ih^Z\Zl_e_c\gh\mxlZ[ebpmkha^ZggmxaZjZg__
Kha^ZlviZd_lkhklhysbcbanmgdpbbkiZjZf_ljZfbijhp_^mju[_aiZ
jZf_ljh\ Nmgdpby ih^kqblu\Z_l dhebq_kl\h ij_^f_lh\ ijhqblZgguo \
k_f_klj_ghf_jdhlhjh]haZ^ZgiZjZf_ljhfkdhebq_kl\hfqZkh\aZ^Zg
guf^jm]bfiZjZf_ljhfIjhp_^mjZih^kqblu\Z_ldhebq_kl\hh[jZs_gbc
dnmgdpbbbaZghkblwlhdhebq_kl\hghf_jk_f_kljZdhebq_kl\hqZkh\b
dhebq_kl\hij_^f_lh\\gh\mxlZ[ebpmkha^ZggmxaZjZg__
Ljb]]_ju[Zau^Zgguo
Ljb]]_j[Zau^Zgguo —wlhijhp_^mjZ PL/SQL,dhlhjZyZ\lhfZlbq_kdb
aZimkdZ_lkyijb\hagbdgh\_gbbhij_^_e_gguokh[ulbck\yaZgguok\uihe
g_gb_fhi_jZpbc\klZ\dbm^Ze_gbybebfh^bnbdZpbb^ZgguolZ[ebpuKh
[ulb_ mijZ\eyxs__ aZimkdhf ljb]]_jZ hibku\Z_lky \ \b^_eh]bq_kdbomk
eh\bcDh]^Z\hagbdZ_lkh[ulb_khhl\_lkl\mxs__mkeh\byfljb]]_jZk_j\_j
Oracle Z\lhfZlbq_kdb aZimkdZ_l ljb]]_j lh _klv bgl_jij_lbjm_l dh^ ijh
]jZffuljb]]_jZaZibkZggucgZyaud_ PL/SQL.
H[uqgh ljb]]_ju bkihevamxl ^ey \uiheg_gby keh`guo ijh\_jhd h]
jZgbq_gbc p_ehklghklb fgh]hZki_dlguo ijh\_jhd \uiheg_gby ijZ\be jZa
]jZgbq_gby^hklmiZbli
Ljb]]_jaZimkdZ_lkyijb\uiheg_gbbh^ghcbalj_ohi_jZpbcbaf_g_
gbykh^_j`bfh]hlZ[ebpu INSERT, DELETEbeb UPDATE.Ljb]]_jfh`_l
aZimkdZlvkybg_kdhevdbfbhi_jZlhjZfbghohly[uh^bghi_jZlhjbaljhcdb
^he`_g[ulvh[yaZl_evghmdZaZg\mkeh\bbaZimkdZljb]]_jZ?kebi_j_q_gv
hi_jZlhjh\aZimkdZxsboljb]]_j\dexqZ_lhi_jZlhj UPDATE,lh^eymkeh
\bckjZ[Zlu\Zgbyfh]ml[ulvmdZaZgudhgdj_lgu_baf_gy_fu_klhe[pu
Dh^ljb]]_jZfh`_l\uihegylvkyeb[h^heb[hihke_l_ohi_jZlhjh\
34
dhlhju_bgbpbbjh\ZebaZimkdljb]]_jZGZijbf_j_kebljb]]_jaZimkdZ_lky
^ey ijh\_jdb iheghfhqbcihevah\Zl_eygZijZ\h\uiheg_gbyhi_jZpbblh
dhg_qghgm`ghbkihevah\Zlvljb]]_jkaZimkdhf^h\uiheg_gbyhi_jZpbbk
dexq_\uf keh\hf BEFORE). ?keb ljb]]_j ijbf_gy_lky ^ey nhjfbjh\Zgby
^Zgguo^eyZm^blhjkdhcaZibkblhjZamfghbkihevah\Zlvljb]]_jkaZimkdhf
ihke_\uiheg_gbyhi_jZpbb kdexq_\ufkeh\hf AFTER).
Dh^ ljb]]_jZ fh`_l [ulv Zkkhpbbjh\Zg eb[hkhi_jZpb_cgZ^lZ[eb
p_c\p_ehfeb[hkdZ`^hckljhdhcgZ^dhlhjhc\uihegy_lkyhi_jZpby<
aZ\bkbfhklb hl wlh]h ljb]]_ju ih^jZa^_eyxl gZ hi_jZlhjgu_ ljb]]_ju b
kljhqgu_ ljb]]_ju Hi_jZlhjgu_ ljb]]_ju h[uqgh bkihevamxl ^ey ijh
\_jdb ijZ\be jZa]jZgbq_gby ^hklmiZ hi_jbjmxsbo lZ[ebp_c \ p_ehf Z
kljhqgu_ljb]]_juqZklhbkihevamxl^ey ijh\_jdbh]jZgbq_gbcp_ehklgh
klb ijb \klZ\d_ kljhd Mkeh\b_ aZimkdZ kljhqgh]h ljb]]_jZ fh`_l [ulv
mlhqg_gh^hihegbl_evgufeh]bq_kdbfmkeh\b_f
Qlh[u kha^Zlv ljb]]_j g_h[oh^bfh bf_lv kbkl_fgu_ ijb\be_]bb
CREATE TRIGGER. >ey kha^Zgby ljb]]_jZ \ ko_f_ hlebqghc hl l_dms_c
ko_fu ihevah\Zl_ey lj_[mxlky kbkl_fgu_ ijb\be_]bb CREATE ANY
TRIGGER.
Hi_jZlhj hij_^_e_gby ljb]]_jZ Oracle bkihevam_l ke_
^mxsbckbglZdkbk
CREATE[ OR REPLACE] TRIGGER [bfy ko_fu. ]bfy_ljb]]_jZ
{BEFORE I AFTER}
{INSERT I DELETE I UPDATE [OF bfy_klhe[pZ [, bfy_klhe[pZ ... ]] }
[OR {INSERT I DELETE I UPDATE [OF bfy_klhe[pZ [,
bfyBklhe[pZ ]]}...]
ON [bfyBko_fu]{bfyBlZ[ebpu I bfyBij_^klZ\e_gby }
[FOR EACH ROW] [WHEN mkeh\b_ ]
FQHpbnbdZpbbBQDdHPDBgDB3L/SQL
Dexq_\h_ keh\h OR REPLACE mdZau\Z_l gZ [_amkeh\gh_ aZf_s_gb_
klZjh]h l_dklZ ljb]]_jZ ?keb dexq_\h_ keh\h OR REPLACE g_ mdZaZgh b
ljb]]_j hij_^_e_g \ kbkl_f_ lh aZf_s_gby klZjh]h agZq_gby ljb]]_jZ g_
ijhbkoh^blb\ha\jZsZ_lkykhh[s_gb_h[hrb[d_
Dexq_\u_ keh\Z BEFOREbeb AFTERmdZau\ZxlgZ\uiheg_gb_dh^Z
ljb]]_jZeb[h^heb[hkhhl\_lkl\_gghihke_hi_jZlhjh\fZgbimebjh\Zgby
^Zggufbbgbpbbjh\Z\rboaZimkdljb]]_jZ
Dexq_\u_keh\Z INSERT, DELETEbeb UPDATE hij_^_eyxldhgdj_l
guc hi_jZlhj aZimkdZxsbc ljb]]_j >ey hi_jZlhjZ UPDATE fh]ml [ulv
mdZaZgu klhe[pu baf_g_gb_ dhlhjuo aZimkdZ_l ljb]]_j ?keb dhgdj_lgu_
klhe[pug_mdZaZgulhljb]]_jaZimkdZ_lbaf_g_gb_ex[h]hklhe[pZG_h[y
aZl_evgh_ dexq_\h_ keh\h OR ijbkh_^bgy_l ^hihegbl_evguc hi_jZlhj aZ
imkdZxsbcljb]]_j
Dexq_\h_ keh\h ON aZ^Z_l bfy lZ[ebpu beb ij_^klZ\e_gby Zkkhpbb
jh\Zggh]hkljb]]_jhf
G_h[yaZl_evgh_dexq_\h_keh\h ON EACH ROWhij_^_ey_lljb]]_j
dZdkljhqguc
35
G_h[yaZl_evgh_dexq_\h_keh\h WHENaZ^Z_l^hihegbl_evgh_eh]bq_
kdh_mkeh\b_km`Zxs__h[eZklv^_ckl\byljb]]_jZ
Ij_`^_q_fi_j_clbdijbf_jmihkljh_gbyljb]]_jZijb\_^_fg_dhlh
ju_ ^hihegbl_evgu_ k\_^_gby h[ h[jZ[hld_ bkdexqbl_evguo kblmZpbc \
Oracle. >ey ih^dexq_gby d f_oZgbafm h[jZ[hldb hrb[hd ihevah\Zl_evkdbo
lhq_d \oh^Z ijbf_gy_lky ijhp_^mjZ RAISE_APPLICATION_ERROR. K __
ihfhsvxfh`ghh[jZ[hlZlv^h 1000hij_^_ey_fuoihevah\Zl_e_fhrb[hdk
ghf_jZfb \ ^bZiZahg_ hl -20000 ^h -20999. <uah\ ijhp_^mju
RAISE_APPLICATION_ERROR ijb\h^bl d ]_g_jZpbb bkdexqbl_evghc kb
lmZpbb b aZ\_jr_gbx \uiheg_gby \ua\Z\r_c ijhp_^mjm ijh]jZffu kjZ\
gbl_kjZkkfhlj_gguf\ur_hi_jZlhjhf PL/SQL RAISE).Ijbwlhf\kj_^m
\ua\Z\rmx ijh]jZffm \ha\jZsZ_lky ghf_j b l_dklh\h_ khh[s_gb_ h lbi_
hrb[db
JZkkfhljbf ijbf_j ljb]]_jZ dhlhjuc \uihegy_lky _keb agZq_gb_
\\h^bfh]h Zljb[mlZ mdehgy_lky ih fh^mex hl kj_^g_]h agZq_gby ^ey l_
dms_]h khklhygby lZ[ebpu Imklv lZ[ebpZ Tab1 knhjfbjh\ZgZ ij_^eh`_
gbyfb
CREATE TABLE LZb1 (Atl NUMBER);
INSERT INTO LZb1 VALUES (10 ) ;
INSERT INTO LZb1 VALUES ( 30 ) ;
INSERT INTO LZb1 VALUES ( 5 0) ;
Ijhlhdhe kha^Zgby ljb]]_jZ ij_^klZ\e_g gb`_. Ijb kjZ[Zlu\Zgbb
ljb]]_jZij_^mkfhlj_gZ]_g_jZpbyklZg^Zjlghch[jZ[hldbhrb[dbdhlhjhc
ijbk\Zb\Z_lkyghf_j -20002kkhhl\_lkl\mxsbf^bZ]ghklbjmxsbfkhh[s_
gb_f H[jZlbl_ \gbfZgb_ gZ ij_^hij_^_e_ggmx i_j_f_ggmx :new.Atl, kh
^_j`Zsmxih__kfukem\\h^bfh_agZq_gb_ Zljb[mlZ Atl.
IJBF?J 4.6.1.
SQL> CREATE OR REPLACE TRIGGER TRIG_TBI
2 BEFORE INSERT ON LZb1
3 FOR EACH ROW
4 DECLARE
5 StatAvg NUMBER;
6 StatN NUMBER;
7 BEGIN
8 SELECT COUNT(Atl),SUM(At1) INTO StatN, StatAvg
9 FROM Tab1;
10 IF (ABS (StatAvg - StatN* (: new .Alt1)) > 30)
11 THEN RAISE_APPLICATION_ERROR (-20002, ' Kebrdhf [hevrh_
mdehg_gb_ ' );
12 END IF;
13 END;
14 /
Trigger created.
36
JZ[hlm f_oZgbafZ ljb]]_jZ ijhbeexkljbjm_f gZ ijbf_j_ Ijb \\h^_
agZq_gby^hklZlhqgh[ebadh]hdkj_^g_fm\^ZgghfkemqZ_ 40),ljb]]_jg_
aZimkdZ_lkybgbq_]hg_ijhbkoh^blIjb\\h^_agZq_gbyZljb[mlZjZ\gh
]h 90,khhl\_lkl\mxsZyklZlbklbdZmdZau\Z_lgZ[hevrh_mdehg_gb_ijhbkoh^bl kjZ[Zlu\Zgb_ ljb]]_jZ b gh\Zy kljhdZ g_ \dexqZ_lky Hi_jZpby \u
[hjdbih^l\_j`^Z_lh`b^Z_fh_baf_g_gb_\lZ[ebp_
SQL> insert into tab1 values (40);
I row created.
SQL> insert into tab1 values (90);
insert into tab1 values (90)
ERROR at line 1:
ORA-20002:Kebrdhf[hevrh_mdehg_gb_
ORA-06512: at "SYSTEM. TRIG_TBI", line 9
ORA-04088: error during execution of trigger 'SYSTEM .TRIG_TBI'
SQL> select * from tab1;
Ke_^mxsbc ijbf_j beexkljbjm_l \hafh`ghklv h[jZ[hldb bkdexqb
l_evghc kblmZpbb kj_^kl\Zfb ihevah\Zl_evkdhc ijh]jZffu < ^Zgghf kem
qZ_kha^Z_lkyljb]]_jdhlhjucijbij_\ur_gbbaZ^Zggh]hihjh]Zmdehg_
gby\\h^bfh]hagZq_gbyZljb[mlZ\u\h^bl^bZ]ghklbq_kdh_khh[s_gb_Ijb
wlhf^Zggu_\lZ[ebpm\\h^ylky
IJBF?J
SQL> CREATE OR REPLACE TRIGGER TRIG_TB2
2 BEFORE INSERT ON LZb1
3 FOR EACH ROW
4 DECLARE
5 StatAvg NUMBER;
6 StatN NUMBER;
7 Special_case EXCEPTION; --Ihevah\Zl_evkdZybkdexqbl_evgZykb
lmZpby
8 BEGIN
9 SELECT COUNT(Atl),SUM(AtI) INTO StatN, StatAvg
10 FROM Tab1;
11 IF (ABS (StatAvg - StatN* (: new. Atl)) > 30)
12 THEN RAISE Special_case;
13 END IF;
14 EXCEPTION
15 WHEN Special_case THEN
16 DBMS_OUTPUT. PUT_LINE ( 'Kebrdhf[hevrh_mdehg_gb_ ');
17 WHEN OTHERS THEN
18 DBMS_OUTPUT. PUT_LINE ( ' He^bZ]ghklbjh\ZggZyhrb[dZljb]]_jZ '
);
37
19 END;
20 /
Trigger created.
Ijb \\h^_ agZq_gby Zljb[mlZ jZ\gh]h 90 ijhbkoh^bl kjZ[Zlu\Zgb_
ljb]]_jZ TRIG_TB2.<u\h^blky^bZ]ghklbq_kdh_khh[s_gb_b\\h^blkygh
\ZykljhdZIj_^klZ\e_ggZyhi_jZpby\u[hjdbih^l\_j`^Z_lh`b^Z_fh_ba
f_g_gb_\lZ[ebp_
SQL> insert into tabl values(90);
Kebrdhf[hevrh_mdehg_gb_
< hlebqb_ hl ijhp_^mj nmgdpbc b iZd_lh\ k_j\_j Oracle g_ ojZgbl
dh^ljb]]_jZ\\b^_kdhfibebjh\Zggh]h[ehdZ PL/SQL.Ijbi_j\hfaZimkd_
ljb]]_jZ_]hdh^kqblu\Z_lkybakeh\Zjy^Zgguodhfibebjm_lkybkdhfib
ebjh\ZggZy\_jkbykhojZgy_lky\h[eZklb SGA.Ihwlhfm^eyqZklhbkihev
am_fuo ljb]]_jh\ p_e_khh[jZagh dh^ hl\_qZxsbc aZ ijhp_^mjgmx qZklv
ljb]]_jZ\dexqZlv\ojZgbfmxijhp_^mjmZ\l_e_ljb]]_jZhklZ\eylvlhev
dhaZibkvmkeh\bc aZimkdZb\uah\ukhhl\_lkl\mxsboijhp_^mjbnmgdpbc
GZij_^eh`_gbyyaudZ SQL,\dexq_ggu_\dh^ljb]]_jZ Oracle,gZeh
`_guke_^mxsb_h]jZgbq_gbyL_ehljb]]_pag_fh`_l\dexqZlv\k_[yy\
gh_ bkihevah\Zgb_ mijZ\eyxsbo hi_jZlhjh\ COMMIT, ROLLBACK b
SAVEPOINT, hi_jZlhjh\ yaudZ hij_^_e_gby ^Zgguo CREATE, ALTER b
DROP, hi_jZlhjh\ mijZ\eyxsbo jZa]jZgbq_gb_f ^hklmiZ GRANT b
REVOKE,ZlZd`_g_y\gh_\uiheg_gb_i_j_qbke_gguohi_jZlhjh\q_j_a\u
ah\uijhp_^mjbnmgdpbc
AZ^Zgb_
1. Kha^Zlv ljb]]_j dhlhjuc kqblZ_l kj_^gxx klbi_g^bx b \u^Z_l
^bZ]ghklbq_kdh_ khh[s_gb_ ijb ij_\ur_gbb aZ^Zggh]h ihjh]Z
mdehg_gby \\h^bfh]h agZq_gby Zljb[mlZ \ aZ\bkbfhklb hl kj_^g_c
klbi_g^bbijbwlhfijhbkoh^blaZiheg_gb_g_dhlhjhclZ[ebpu
2. Kha^Zlv ljb]]_j dhlhjuc kqblZ_l kj_^gbc [Zee \ aZ^Zgguc ^_gv b
\u^Z_l ^bZ]ghklbq_kdh_ khh[s_gb_ ijb ij_\ur_gbb aZ^Zggh]h ihjh]Z
mdehg_gby \\h^bfh]h agZq_gby Zljb[mlZ \ aZ\bkbfhklb hl kj_^g_]h
[ZeeZijbwlhfijhbkoh^blaZiheg_gb_g_dhlhjhclZ[ebpu
3. Kha^Zlv ljb]]_j dhlhjuc hij_^_ey_l ]jZgbpu baf_g_gby ghf_jh\
ij_^f_lh\ b \u^Z_l ^bZ]ghklbq_kdh_ khh[s_gb_ ijb ij_\ur_gbb
aZ^Zggh]h ihjh]Z mdehg_gby \\h^bfh]h agZq_gby Zljb[mlZ ijb wlhf
ijhbkoh^blaZiheg_gb_lZ[ebpu
4. Kha^Zlv ljb]]_j dhlhjuc hij_^_ey_l ]jZgbpu baf_g_gby ghf_jh\
ij_ih^Z\Zl_e_c b \u^Z_l ^bZ]ghklbq_kdh_ khh[s_gb_ ijb ij_\ur_gbb
aZ^Zggh]h ihjh]Z mdehg_gby \\h^bfh]h agZq_gby Zljb[mlZ ijb wlhf
ijhbkoh^blaZiheg_gb_g_dhlhjhclZ[ebpu
5. Kha^Zlv ljb]]_j dhlhjuc kqblZ_l kj_^gbc j_clbg] mgb\_jkbl_lh\ b
\u^Z_l ^bZ]ghklbq_kdh_ khh[s_gb_ ijb ij_\ur_gbb aZ^Zggh]h ihjh]Z
mdehg_gby \\h^bfh]h agZq_gby Zljb[mlZ \ aZ\bkbfhklb hl \_ebqbgu
kj_^g_]hj_clbg]Zijbwlhfijhbkoh^blaZiheg_gb_g_dhlhjhclZ[ebpu
38
6. Kha^Zlv ljb]]_j dhlhjuc hij_^_ey_l ]jZgbpu baf_g_gby ghf_jh\
e_dlhjh\ \ aZ\bkbfhklb hl ghf_jh\ qblZ_fuo dmjkh\ b \u^Z_l
^bZ]ghklbq_kdh_ khh[s_gb_ ijb ij_\ur_gbb aZ^Zggh]h ihjh]Z
mdehg_gby \\h^bfh]h agZq_gby Zljb[mlZ ijb wlhf ijhbkoh^bl
aZiheg_gb_g_dhlhjhclZ[ebpu
Ebl_jZlmjZ
1. Bkihevah\Zgb_ORACLE<bevyf=I_c^`GZlZgOvxa>w\b^Hklbg
b^j–DFKI[Ba^Zl^hf³<bevyfk”, 1998. –k
2. Kfbjgh\KGJZ[hlZ_fkORACLE.- F=_ebhk-k
39
6. H]eZ\e_gb_
JZkij_^_e_ggu_[Zau^Zgguo25$&/( ........................................................ 3
KljmdlmjZwda_fieyjh\2UDFOH..................................................................... 3
=eh[ZevgZykbkl_fgZyh[eZklv............................................................... 4
JZa^_ey_fucime.................................................................................. 4
Dwr-[mn_j^Zgguo .................................................................................. 4
;mn_j`mjgZeZljZgaZdpbc ................................................................. 5
Nhgh\u_ijhp_kku2UDFOH ...................................................................... 5
Ijhp_kku-^bki_lq_ju............................................................................ 6
Ijhp_kkuihevah\Zl_eybk_j\_jZ ......................................................... 7
Hkgh\gu_h[t_dluKM;>25$&/(............................................................ 7
Lbiu^Zgguo25$&/(..................................................................................... 10
Kljhdh\u_lbiu........................................................................................... 10
Qbkeh\u_lbiu ............................................................................................ 10
2.3;blh\u_kljhdb ............................................................................................ 11
Lbiu^ZlZb\j_fy ....................................................................................... 11
L:;EBPU ......................................................................................................... 12
Kha^Zgb_lZebp ......................................................................................... 12
Yaud3/64/...................................................................................................... 14
MIJ:<E?GB?<UIHEG?GB?FIJH=J:FFU ................................ 16
Hi_jZlhj\_l\e_gby............................................................................... 16
HI?J:LHJPBDE: ............................................................................ 17
Hi_jZlhj*272..................................................................................... 19
Dmjkhju ........................................................................................................ 19
H[jZ[hldZbkdexqbl_evguokblmZpbc...................................................... 22
4.4. Kha^Zgb_ihevah\Zl_evkdboijhp_^mjbnmgdpbc ................................. 26
IZd_lu3/64/............................................................................................ 30
Ljb]]_ju[Zau^Zgguo................................................................................ 34
Ebl_jZlmjZ ......................................................................................................... 39
6. H]eZ\e_gb_ ....................................................................................................... 40
J_^ZdlhjDmag_ph\ZA?
KhklZ\bl_ev:klZoh\ZBN
40
Download