锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍙傝? http://otl.sourceforge.net/otl3_stream_class.htm
50 2.06
<1:536704> 18:31:58.068 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:536704> 18:34:04.713 [00001] There are 3612066 records is loaded!
100 1.38
<1:2085112> 18:36:23.727 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:2085112> 18:38:01.923 [00001] There are 3612066 records is loaded!
1.23
<1:2085112> 18:38:06.941 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:2085112> 18:39:29.849 [00001] There are 3612066 records is loaded!
200 1.02
<1:1499250> 18:41:47.711 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:1499250> 18:42:49.300 [00001] There are 3612066 records is loaded!
<1:1499250> 18:42:54.312 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:1499250> 18:43:53.717 [00001] There are 3612066 records is loaded!
500 0.43
<1:1978536> 18:45:57.790 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:1978536> 18:46:40.685 [00001] There are 3612066 records is loaded!
<1:1978536> 18:45:09.982 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:1978536> 18:45:52.787 [00001] There are 3612066 records is loaded!
1000 0.35
<1:1597632> 18:47:42.973 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:1597632> 18:48:17.715 [00001] There are 3612066 records is loaded!
<1:1597632> 18:48:22.718 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:1597632> 18:49:01.119 [00001] There are 3612066 records is loaded!
<1:1597632> 18:51:17.837 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:1597632> 18:51:24.416 [10001] Signal 31 recieved.
<1:1597632> 18:49:49.976 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:1597632> 18:50:28.192 [00001] There are 3612066 records is loaded!
2000 0.34
<1:2883830> 18:51:47.365 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:2883830> 18:52:21.163 [00001] There are 3612066 records is loaded!
<1:2883830> 18:52:26.166 [00001] The load SQL is [select USER_NUMBER from dr_gsm_931_20050831 where 1=1 ]
<1:2883830> 18:53:01.576 [00001] There are 3612066 records is loaded!
聽
褰撳紓甯哥敓鎴愪箣鍚庯紝紼嬪簭琚腑姝紝鎺у埗鏉冧氦緇欏紓甯稿鐞嗘ā鍧楋紝寮傚父澶勭悊妯″潡鎹曡幏褰撳墠寮傚父鍙ユ焺錛屽茍浜ょ敱鐩稿簲鐨勭▼搴忓鐞嗭紱濡傛灉錛屽紓甯鎬績(jī)閲屾ā鍧楁病鏈夋崟鎹夊埌寮傚父鍙ユ焺錛岄偅涔堝畠?yōu)畣琚紶杈撳埌褰撳墠绋嬪簭鐨勫鍥淬?/span>
聽
闄ら潪鐢變竴浜涚壒孌婄殑瑕佹眰錛屼竴鑸儏鍐典笅寮傚父灝嗗啀褰撳墠紼嬪簭鐨勫紓甯稿鐞嗘ā鍧椾腑琚鐞嗐傚紓甯稿鐞嗘ā鍧椾互 EXCEPTION 寮濮?/span> END; 緇撳熬銆?/span>
聽聽聽聽聽聽 Declare
聽聽聽聽聽聽 聽聽聽聽聽聽 /*鈥︹︹︹?/
聽聽聽聽聽聽 begin
聽聽聽聽聽聽 聽聽聽聽聽聽 /*鈥︹︹︹?/
聽聽聽聽聽聽 exception
聽聽聽聽聽聽聽聽聽聽聽聽聽 when /* 寮傚父鍚嶇О */
聽聽聽聽聽聽聽聽聽聽聽聽聽 then /* 寮傚父澶勭悊 */
聽聽聽聽聽聽聽聽聽聽聽聽聽 when other
聽聽聽聽聽聽聽聽聽聽聽聽聽 then /* 寮傚父澶勭悊 */
聽聽聽聽聽聽 end;
寮傚父澶勭悊妯″潡鐨勮娉曞熀鏈笂浠?/span> CASE 涓鑷達(dá)紝鍑℃槸鍦?/span> when 涓湁瀹氫箟鐨勫紓甯擱兘灝嗚澶勭悊錛岃屾病鏈夌殑鍒欒浼犺緭銆備竴涓壒孌婄殑寮傚父澶勭悊璇彞鏄?/span> WHEN OTHERS 銆傚氨鎯沖湪錛?/span> 3 錛変腑鎵璇寸殑錛屽畠浼?xì)澶勭悊鎵鏈変負(fù)琚鐞嗙殑寮傚父錛屽洜姝ゅ繀欏誨皬蹇?jī)鋴社敤瀹冨Q屾渶濂芥槸鍦ㄦ渶澶栧眰鐨勭▼搴忎腑銆傚綋鐒跺鏋滃枩嬈㈠伔鎳掔殑錛屽ぇ鍙互鍦ㄥ紓甯稿鐞嗘ā鍧椾腑鍙斁涓涓?/span> OTHERS 銆傛敞鎰忥紝鏃犺鍝鎯呭喌錛?/span> OTHERS 鍙兘榪欏彧鍦ㄥ紓甯稿鐞嗙殑鏈鍚庝竴浣嶃?/span>
聽
鏈夎叮鐨勬槸錛屽彲浠ュ湪涓涓?/span> when 涓鐞嗗涓紓甯稿彞鏌勩?/span>
聽聽聽聽聽聽 Exception
聽聽聽聽聽聽聽聽聽聽聽聽聽 When no_data_found or invalid_employee_id or dbms_ldap.invalid session
聽聽聽聽聽聽聽聽聽聽聽聽聽 Then /*鈥︹︹?.*/
聽聽聽聽聽聽 End;
聽聽聽聽聽聽 /
鍦ㄨ繖涓緥瀛愰噷錛屾湁鏍囧噯鍖呯殑寮傚父銆佽嚜瀹氫箟寮傚父鍜岄潪鏍囧噯鍖呬腑鐨勫紓甯搞傝繖浜涘紓甯稿彧鑳界敤 or 榪炴帴錛屼笉鍙互鐢?/span> and 錛屽洜涓哄彧鏈変竴涓紓甯歌兘澶熺敓鎴愩?/span>
聽
闈?/span> raise_application_error 鐢熸垚鐨勫紓甯革紝濡傛灉娌℃湁琚鐞嗚屼竴鐩翠紶閫掑埌緋葷粺鐜涓紝閭d箞鐜?yōu)畣瑙嗘儏鍐典綔鍑虹浉搴旂殑鍙嶆槧銆傚湪 sqlplus 涓紝 oracle 灝嗗洖婊氭墍鏈?/span> DML 瀵規(guī)暟鎹墍鍋氱殑淇敼銆傚湪 sqlplus 鐜涓紝鍥犱負(fù)鏈夎嚜鍔ㄥ洖婊氱殑瀛樺湪錛屾垜浠彲浠ヤ繚鐣欏嚭鐜版湭琚鐞嗙殑寮傚父鐨勫彲鑳芥э紱鑰屽湪鍙﹀鐨勪竴浜涚幆澧冧腑錛屽垯闇瑕佷粩緇嗚璁℃渶澶栧眰紼嬪簭銆?/span>
眉聽聽聽聽聽聽聽聽 鎹曟崏浠諱綍鏈夊彲鑳戒紶鍑虹殑寮傚父銆?/span>
眉聽聽聽聽聽聽聽聽 璁板綍閿欒浠ヤ究浜庡垎鏋愩?/span>
眉聽聽聽聽聽聽聽聽 緇欏閮ㄧ幆澧冧竴涓俊鎭紝浠ヤ究浜庡叾浣滃嚭鐩稿簲鐨勫鐞嗐?/span>
聽
瀵逛簬鑷畾涔夊紓甯革紝鍥犱負(fù) sqlcode 鍊兼案榪滄槸 1 錛屾墍浠ュ綋瀹冭浼犲嚭鏃訛紝濡傛灉澶栧洿紼嬪簭涓病鏈夊畾涔夌浉鍚屽悕縐扮殑寮傚父錛屾垜浠皢涓嶇煡閬撴槸浠涔堝紓甯鎬駭鐢熶簡(jiǎn)銆傚洜姝わ紝涓嶈灝嗚嚜瀹氫箟寮傚父浼犻掑嚭鍘匯?/span>
聽
鍦ㄧ▼搴忎腑澶勭悊鍑犱釜浜掔浉鐙珛鐨勬搷浣滄椂錛屼負(fù)浜?jiǎn)閬垮厤鍑虹幇鍥犱皋Z竴涓搷浣滀駭鐢熷紓甯歌屼嬌鏁翠釜紼嬪簭琚腑鏂殑鎯呭喌錛屾湁蹇呰灝嗚繖浜涚嫭绔嬬殑鎿嶄綔鏀懼湪鍚勮嚜鐨勮櫄鎷熷潡涓?/span>
聽聽聽聽聽聽 Procedure change_data is
聽聽聽聽聽聽 Begin
聽聽聽聽聽聽聽聽聽聽聽聽聽 Begin
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 Delete from employee where 鈥?.
聽聽聽聽聽聽 聽聽聽聽聽聽 Exception
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 When others then null;
聽聽聽聽聽聽聽聽聽聽聽聽聽 End;
聽
聽聽聽聽聽聽聽聽聽聽聽聽聽 Begin
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 Update company set 鈥︹?
聽聽聽聽聽聽 聽聽聽聽聽聽 Exception
When others then null;
聽聽聽聽聽聽聽聽聽聽聽聽聽 End;
聽
聽聽聽聽聽聽聽聽聽聽聽聽聽 Begin
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 Insert into company_history select * from company where 鈥?
聽聽聽聽聽聽 聽聽聽聽聽聽 Exception
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 When others then null;
聽聽聽聽聽聽聽聽聽聽聽聽聽 End;
聽聽聽聽聽聽 End;
聽聽聽聽聽聽 /
聽
聽
Pl/sql
鎻愪緵浜?jiǎn)涓浜涘唴寤虹殑鍑芥暟鏉ュ府鍔╂垜浠‘瀹氥佸垎鏋愬紓甯搞?/span>
聽
SQLCODE
榪欎釜鍑芥暟鍦ㄥ墠闈㈡湁鎻愬埌榪囷紝瀹冩槸涓涓敤浜庤繑鍥炲綋鍓嶆ā鍧椾腑鏈榪戜竴嬈″紓甯稿肩殑鍑芥暟錛屾垨鑰呰鏄潪鍏ユ爤紼嬪簭鐨勫紓甯稿箋傛墦涓瘮鏂癸細(xì)濡傛灉鍦ㄥ綋鍓嶇▼搴忕殑寮傚父妯″潡涓皟鐢ㄤ簡(jiǎn)鍙︿竴涓▼搴忥紝 oracle 灝嗗綋鍓嶇▼搴忓強(qiáng)鐩稿簲鐨勭幆澧冨彉閲忥紙鍖呮嫭寮傚父鍊鹼級(jí)鍘嬪叆緋葷粺鏍堬紱鍦ㄨ璋冪敤紼嬪簭涓敓鎴愪簡(jiǎn)涓涓間負(fù) 1 鐨勫紓甯革紝閭d箞 sqlcode 灝嗚繑鍥?/span> 1 錛涗箣鍚庡垰鎵嶇殑紼嬪簭鍑烘爤錛?/span> sqlcode 榪斿洖褰撳墠寮傚父鍊箋傞渶瑕佹敞鎰忕殑鏄紝涓嶈鍦ㄥ紓甯告ā鍧椾箣澶栦嬌鐢ㄥ畠錛岃繖鏍蜂笉浼?xì)鏈変恢M綍鎰忎箟銆傚綋娌℃湁寮傚父鎴栧湪寮傚父妯″潡涔嬪浣跨敤鏃訛紝 SQLCODE 榪斿洖 0 錛涜繑鍥炲?/span> 1 鏄寚鑷畾涔夊紓甯搞?/span>
聽
SQLERRM
鎺ユ敹寮傚父鍊鹼紝榪斿洖鐩稿簲鐨勯暱搴︿笉瓚呰繃 512 瀛楄妭鐨勬弿榪拌銆傚鏋滄病鏈変紶鍏ュ紓甯稿鹼紝鍒欒繑鍥炲綋鍓嶅紓甯告弿榪般?/span>
聽聽聽聽聽聽 Begin
聽聽聽聽聽聽 聽聽聽聽聽聽 Dbms_output.put_line( sqlerrm(-1403);
聽聽聽聽聽聽 End;
Sql>/
Ora-1403: no data found
鍦ㄩ渶瑕佷綋鏋勯暱搴﹁秴榪?/span> 512 瀛楄妭鐨勬弿榪版椂錛?/span> oracle 寤鴻浣跨敤 dbms_utility.format_error_stack 銆傛樉鐒?dòng)灱岀敤杩欎釜鍑芥暟鏉ュ垽鏂竴涓紓甯告槸鍚︿負(fù)緋葷粺寮傚父鏄緢鏈夌敤鐨勶紝濡傛灉涓嶆槸鐨勮瘽錛屽皢榪斿洖浠ヤ笅涓ょ鎯呭喌鐨勪竴縐嶃?/span>
濡傛灉鏄竴涓礋鏁幫細(xì)
聽聽聽聽聽聽 ora-nnnnn: message not found,; product=rdbms; facility=ora
濡傛灉鏄竴涓鏁幫細(xì)
聽聽聽聽聽聽 -nnnnn: non-oracle exception
聽
DBMS_UTILITY.FORMAT_ERROR_STACK
榪斿洖褰撳墠寮傚父鐩稿簲鐨勬弿榪幫紝娌℃湁瀛楃闀垮害闄愬埗銆備笌 SQLCODE 鐩稿悓鐨勬槸錛屽繀欏誨湪寮傚父澶勭悊妯″潡涓嬌鐢ㄣ傝櫧鐒跺悕縐頒腑鏈変竴涓?/span> stack 鍦紝浣嗛氳繃瀹冨茍涓嶈兘鐭ラ亾寮傚父鐨勬渶鍒濈敓鎴愬錛岄渶瑕佺殑璇濆氨蹇呴』浣跨敤 DBMS_UTILITY.FORMAT_ERROR_BACKTRACE 銆?/span>
聽
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
緋葷粺涓烘渶榪戜竴嬈$敓鎴愮殑寮傚父璁劇疆浜?jiǎn)涓涓爤錛屽茍璺熻釜瀹冪殑浼犻掕繃紼嬶紝鑰岃繖涓嚱鏁頒嬌鐢ㄨ繖涓爤錛岀劧鍚庤繑鍥炶寮傚父鐨勬暣涓紶閫掕繃紼嬨傝繖涓嚱鏁板閿欒鐨勫畾浣嶅拰瀹炴柦涓嬩竴姝ュ鐞嗚搗鐫鑷沖叧閲嶈鐨勪綔鐢ㄣ?/span>
聽聽聽聽聽聽 Create or replace procedure procl is
聽聽聽聽聽聽 Begin
聽聽聽聽聽聽 聽聽聽聽聽聽 Dbms_output.put_line(鈥榬unning proc1鈥?;
聽聽聽聽聽聽聽聽聽聽聽聽聽 Raise no_data_found;
聽聽聽聽聽聽 End;
聽聽聽聽聽聽 /
聽聽聽聽聽聽 create or replace procedure proc2 is
聽聽聽聽聽聽 begin
聽聽聽聽聽聽 聽聽聽聽聽聽 dbms_output.put_line(鈥榗alling proc1鈥?;
聽聽聽聽聽聽聽聽聽聽聽聽聽 proc1;
聽聽聽聽聽聽 end;
聽聽聽聽聽聽 /
聽聽聽聽聽聽 create or replace procedure proc3 is
聽聽聽聽聽聽 begin
聽聽聽聽聽聽 聽聽聽聽聽聽 dbms_output.put_line(鈥榗alling proc2鈥?;
聽聽聽聽聽聽聽聽聽聽聽聽聽 proc2;
聽聽聽聽聽聽 exception
聽聽聽聽聽聽聽聽聽聽聽聽聽 when no_data_found
聽聽聽聽聽聽聽聽聽聽聽聽聽 then
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 dbms_output.put_line(鈥榚rror stack at top level鈥?;
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 dbms_output.put_line(dbms_utility.format_error_backtrace);
聽聽聽聽聽聽 end;
聽聽聽聽聽聽 /
鐜板湪鍙互榪愯 proc3 鏉ョ湅鐪嬬粨鏋溿?/span>
Sql>set serveroutput on;
Sql>begin
2聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 dbms_output.put_line(鈥榩roc3->proc2->proc1 backtrace鈥?;
3聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 proc3;
4聽聽聽聽 end;
5聽聽聽聽 /
聽聽聽 Proc3 -> Proc2 -> Proc1 backtrace
聽聽聽 calling proc2
聽聽聽 calling proc1
聽聽聽 running proc1
聽聽聽 Error stack at top level:
聽聽聽 ORA-06512: at "SCOTT.PROC1", line 4
聽聽聽 ORA-06512: at "SCOTT.PROC2", line 5
ORA-06512: at "SCOTT.PROC3", line 4
浜嬪疄涓婏紝姣忔寮傚父鐨勪駭鐢熼兘灝嗛噸緗繖涓紓甯告爤錛屽彧鏄渶鍚庝竴嬈′粠緋葷粺鏍堝嚭鏍堢殑鏄渶澶栧眰鐨勭▼搴忓潡錛屾墍浠ュ彲浠ユ竻妤氬湴鐪嬪埌寮傚父鐢熸垚鐨勬暣涓繃紼嬨備笂闈㈣繖涓▼搴忕殑鎵ц榪囩▼鏄繖鏍風(fēng)殑錛氶鍏堢敤 put_line 鎵撳嵃 Proc3 -> Proc2 -> Proc1 backtrace 錛?/span> 璋冪敤 proc3 錛屽綋鍓嶇▼搴忓叆鏍?/span> => 鎵撳嵃 calling proc2 錛岃皟鐢?/span> proc2 錛?/span> proc3 鍏ユ爤 => 鎵撳嵃 calling proc1 錛岃皟鐢?/span> proc1 錛?/span> proc2 鍏ユ爤 => 鎵撳嵃 running proc1 錛岀敓鎴?/span> no_data_found 寮傚父錛岃寮傚父琚帇鍏ュ紓甯告爤涓?/span> =>聽 proc2 鍑烘爤錛屽茍媯(gè)嫻嬪埌鏉ヨ嚜絎?/span> 5 琛岃皟鐢ㄤ紶閫掕繃鏉ョ殑寮傚父錛屽皢瀹冨湪姝ゅ帇鍏ュ紓甯告爤 => proc3 鍑烘爤錛屽茍媯(gè)嫻嬪埌鏉ヨ嚜絎?/span> 4 琛岃皟鐢ㄤ紶閫掕繃鏉ョ殑寮傚父錛屽皢瀹冨湪姝ゅ帇鍏ュ紓甯告爤錛?/span> dbms_utility.format_error_backtrace 灝嗗紓甯告爤涓俊鎭弽鐩告墦鍗板嚭鏉?/span> =>聽 鏈澶栧眰紼嬪簭鍑烘爤錛?/span> end 銆?/span>
浠ヤ笅鏄紜嬌鐢ㄨ繖涓嚱鏁扮殑涓浜涙敞鎰忎簨欏癸細(xì)
眉聽聽聽聽聽聽聽聽 鍦ㄥ綋鍓嶇▼搴忕殑寮傚父澶勭悊妯″潡涓皟鐢ㄨ繖涓嚱鏁般?/span>
眉聽聽聽聽聽聽聽聽 閬垮厤鍦ㄤ腑闂寸▼搴忎腑浣跨敤寮傚父澶勭悊妯″潡銆?/span>
榪欐牱寮傚父灝辮兘琚紜湴浼犺緭鍒版渶澶栧眰紼嬪簭涓紝騫舵墦鍗板嚭榪欎釜榪囩▼浜?jiǎn)銆?/span>
l聽聽聽聽聽聽聽聽 Raise exception;
l聽聽聽聽聽聽聽聽 Raise package.exception;
l聽聽聽聽聽聽聽聽 Raise;
浠ヤ笂鏄?/span> raise 鐨勪笁縐嶄嬌鐢ㄦ柟娉曘傜涓縐嶇敤浜庣敓鎴愬綋鍓嶇▼搴忎腑瀹氫箟鐨勫紓甯告垨鍦?/span> standard 涓殑緋葷粺寮傚父銆?/span>
聽聽聽聽聽聽 Declare
聽聽聽聽聽聽 聽聽聽聽聽聽 Invalid_id exception;
聽聽聽聽聽聽 聽聽聽聽聽聽 Id_values varchar(2);
聽聽聽聽聽聽 Begin
聽聽聽聽聽聽 聽聽聽聽聽聽 Id_value:=id_for(鈥榮mith鈥?;
聽聽聽聽聽聽聽聽聽聽聽聽聽 If substr(id_value,1,1)!=鈥檟鈥?/span>
聽聽聽聽聽聽聽聽聽聽聽聽聽 Then
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 Raise invalid_id;
聽聽聽聽聽聽聽聽聽聽聽聽聽 End if;
聽聽聽聽聽聽 Exception
聽聽聽聽聽聽聽聽聽聽聽聽聽 When invalid_id
聽聽聽聽聽聽聽聽聽聽聽聽聽 Then
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 Dbms_output.put_line(鈥榯his is an invalid id!鈥?;
聽聽聽聽聽聽 End;
榪欐槸涓涓敓鎴愯嚜瀹氫箟寮傚父鐨勪緥瀛愶紝褰撶劧涔熷彲浠ョ敓鎴愮郴緇熷紓甯革細(xì)
聽聽聽聽聽聽 declare
聽聽聽聽聽聽 聽聽聽聽聽聽 employee_id_in number;
聽聽聽聽聽聽 Begin
Select employee_id into employee_id_in from employ_list where employee_name=&n;
If employee_id_in=0
Then
聽聽聽聽聽聽 Raise zero_devided;
End if;
聽聽聽聽聽聽 Exception
聽聽聽聽聽聽聽聽聽聽聽聽聽 When zero_devided
聽聽聽聽聽聽聽聽聽聽聽聽聽 Then
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 Dbms_output.put_line(鈥榳rong!鈥?;
聽聽聽聽聽聽 End;
鏈変竴浜涘紓甯告槸瀹氫箟鍦ㄩ潪鏍囧噯鍖呬腑鐨勶紝濡?/span> UTL_FILE 錛?/span> DBMS_SQL 浠ュ強(qiáng)紼嬪簭鍛樺垱寤虹殑鍖呬腑寮傚父銆傚彲浠ヤ嬌鐢?/span> raise 鐨勭浜岀鐢ㄦ硶鏉ョ敓鎴愬紓甯搞?/span>
聽聽聽聽聽聽 If day_overdue(isbn_in, browser_in) > 365
聽聽聽聽聽聽 Then
聽聽聽聽聽聽聽聽聽聽聽聽聽 Raise overdue_pkg.book_is_lost
聽聽聽聽聽聽 End if;
鍦ㄦ渶鍚庝竴縐?/span> raise 鐨勫艦寮忎腑錛屼笉甯︿換浣曞弬鏁般傝繖縐嶆儏鍐靛彧鍑虹幇鍦ㄥ笇鏈涘皢褰撳墠鐨勫紓甯鎬紶鍒板閮ㄧ▼搴忔椂銆?/span>
聽聽聽聽聽聽 Exception
聽聽聽聽聽聽聽聽聽聽聽聽聽 When no_data_found
聽聽聽聽聽聽聽聽聽聽聽聽聽 Then
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 Raise;
聽聽聽聽聽聽 End;
聽
Pl.sql 浣跨敤 raise_application_error 榪囩▼鏉ョ敓鎴愪竴涓湁鍏蜂綋鎻忚堪鐨勫紓甯搞傚綋浣跨敤榪欎釜榪囩▼鏃訛紝褰撳墠紼嬪簭琚腑姝紝杈撳叆杈撳嚭鍙傛暟琚疆涓哄師鍏堢殑鍊鹼紝浣嗕換浣?/span> DML 瀵規(guī)暟鎹簱鎵鍋氱殑鏀瑰姩灝嗚淇濈暀錛屽彲浠ュ湪涔嬪悗鐢?/span> rollback 鍛戒護(hù)鍥炴粴銆備笅闈㈡槸璇ヨ繃紼嬬殑鍘熷瀷錛?/span>
聽聽聽聽聽聽 Procedure raise_application_error(
聽聽聽聽聽聽 Num binary_integer;
聽聽聽聽聽聽 Msg varchar2;
聽聽聽聽聽聽 Keeperrorstack Boolean default false
)
鍏朵腑 num 鏄湪 -20999 鍒?/span> -20000 涔嬮棿鐨勪換浣曟暟瀛楋紙浣嗕簨瀹炰笂錛?/span> DBMS_OUPUT 鍜?/span> DBMS_DESCRIBLE 鍖呬嬌鐢ㄤ簡(jiǎn) -20005 鍒?/span> -20000 鐨勬暟瀛楋級(jí)錛?/span> msg 鏄皬浜?/span> 2K 涓瓧絎︾殑鎻忚堪璇紝浠諱綍澶т簬 2K 鐨勫瓧絎﹂兘灝嗚鑷姩涓㈠純錛?/span> keeperrorstack 榛樿涓?/span> false 錛屾槸鎸囨竻絀哄紓甯告爤錛屽啀灝嗗綋鍓嶅紓甯稿叆鏍堬紝濡傛灉鎸囧畾 true 鐨勮瘽灝辯洿鎺ュ皢褰撳墠寮傚父鍘嬪叆鏍堜腑銆?/span>
聽聽聽 CREATE OR REPLACE PROCEDURE raise_by_language (code_in IN PLS_INTEGER)
聽聽聽 IS
聽聽聽聽聽聽 l_message error_table.error_string%TYPE;
聽聽聽 BEGIN
聽聽聽聽聽聽 SELECT error_string
聽聽聽聽聽聽聽聽 INTO l_message
聽聽聽聽聽聽聽聽 FROM error_table, v$nls_parameters v
聽聽聽聽聽聽聽 WHERE error_number = code_in
聽聽聽聽聽聽聽聽聽 AND string_language聽 = v.VALUE
聽聽聽聽聽聽聽聽聽 AND v.parameter = 'NLS_LANGUAGE';
聽
聽聽聽聽聽聽 RAISE_APPLICATION_ERROR (code_in, l_message);
聽聽聽 END;
聽
寮傚父瀹氫箟
聽
鍦ㄤ竴涓紓甯鎬駭鐢熴佽鎹曡幏騫跺鐞嗕箣鍓嶏紝瀹冨繀欏昏瀹氫箟銆?/span> Oracle 瀹氫箟浜?jiǎn)鍑犲崈涓紓甯稿Q岀粷澶у鏁板彧鏈夐敊璇紪鍙峰拰鐩稿叧鎻忚堪錛屼粎浠呭懡鍚嶄簡(jiǎn)鑻ュ共涓渶甯歌鐢ㄥ埌鐨勫紓甯搞傝繖浜涘悕瀛楄鍌ㄥ瓨鍦?/span> STANDARD 錛?/span> UTL_FILE 錛?/span> DBMS_SQL 榪欏嚑涓郴緇熷寘涓紝璇︽儏璇瘋 oracle:pl/sql 寮傚父澶勭悊錛?/span> 1 錛夈?/span>
鍑?guó)檱箣澶栫殑缁濆ぇ澶氭暟寮傚笖R渶瑕佺▼搴忓憳鍛藉悕銆傛湁 2 縐嶅懡鍚嶅紓甯哥殑鏂規(guī)硶錛?/span>
聽
1 錛氬0鏄庝竴涓嚜瀹氫箟寮傚父
鍦?/span> STANDARD 涓殑鍛藉悕浜?jiǎn)鐨勫紓甯稿熀鏈北鏄笌绯痪l熺殑閿欒鐩稿叧鐨勶紙褰撶劧閭d簺鍙湁 errorcode 鐨勫紓甯鎬篃鏄繖鏍鳳級(jí)錛屼絾鍦ㄥ疄闄呯殑搴旂敤涓垜浠粡甯擱渶瑕佷笌鐗瑰畾鐨勫簲鐢ㄧ▼搴忕浉鍏崇殑寮傚父錛岀敱紼嬪簭鍛樺0鏄庣殑寮傚父灝辨槸鐢ㄤ簬澶勭悊榪欑鎯呭喌鐨勩?/span>
Oracle 寮傚父澶勭悊妯″潡鐨勬柟渚跨殑鍦版柟鍦ㄤ簬錛屽畠騫舵病鏈夊尯鍒寰呰嚜瀹氫箟鐨勪笌棰勫畾涔夌殑寮傚父銆傝繖浣垮緱鎴戜滑鍙互鍍忓寰呴瀹氫箟寮傚父涓鏍鳳紝鎹曟崏鍜屽鐞嗚嚜瀹氫箟寮傚父錛屽彧鏄湪姝や箣鍓嶉渶瑕佸0鏄庡畠錛涘悓鏃跺浜庝竴涓嚜瀹氫箟鐨勫紓甯革紝鎴戜滑闇瑕佺敤 RAISE 鏉ユ墜鍔ㄤ駭鐢熴?/span>
涓嬮潰鏄竴涓0鏄庣殑渚嬪瓙錛?/span>
聽聽聽聽聽聽 procedure calc_ammul_sales
聽聽聽聽聽聽 聽聽聽聽聽聽 (company_id_in in company.company_id%tye)
聽聽聽聽聽聽 is
聽聽聽聽聽聽 聽聽聽聽聽聽 invalid_company_id exception;
聽聽聽聽聽聽 聽聽聽聽聽聽 negative_balance excrption;
聽聽聽聽聽聽 聽聽聽聽聽聽 duplicate_company Boolean;
聽聽聽聽聽聽 begin
聽聽聽聽聽聽聽聽聽聽聽聽聽 /*body of executable statement*/
聽聽聽聽聽聽 exception
聽聽聽聽聽聽聽聽聽聽聽聽聽 when invalid_company_id
聽聽聽聽聽聽聽聽聽聽聽聽聽 then /*handle exception*/
聽聽聽聽聽聽聽聽聽聽聽聽聽 when no_data_found
聽聽聽聽聽聽聽聽聽聽聽聽聽 then /*handle exception*/
聽聽聽聽聽聽 聽聽聽聽聽聽 /*鈥?.*/
聽聽聽聽聽聽 end;
闇瑕佹敞鎰忕殑鏄鐞嗗畾涔夌殑鏃跺欙紝鍙湁涓や釜鍦版柟浼?xì)鍑虹幇鑷畾涔夌殑寮傚父锛?xì)
眉聽聽聽聽聽聽聽聽 raise exception 錛?/span>
眉聽聽聽聽聽聽聽聽 when exception then
聽
2 錛氫負(fù)闈為瀹氫箟寮傚父鍏寵仈涓涓悕瀛?/span>
浠呬粎 21 涓瀹氫箟寮傚父瀵規(guī)垜浠潵璇村疄鍦ㄦ槸澶皯浜?jiǎn)锛寴q樻湁鍑犲崈涓紓甯稿彧鏈?/span> errorcode 鍜屾弿榪般傚彟澶栵紝紼嬪簭鍛樹篃鍙互鐢?/span> RAISE_APPLICATION_ERROR 瀹氫箟涓涓惈 errorcode 鍜屾弿榪扮殑寮傚父銆?/span>
褰撶劧錛屽彧鐢?/span> errorcode 涔熷彲浠ュ緢濂藉湴瀹屾垚宸ヤ綔錛屽彧瑕佷綘涓嶆媴蹇?jī)浼?xì)蹇樹簡(jiǎn)閭d覆鏁板瓧浠h〃鐨勬剰鎬濆氨琛屻傛瘮鏂硅 ;
聽聽聽聽聽聽 exception
聽聽聽聽聽聽聽聽聽聽聽聽聽 when others
聽聽聽聽聽聽聽聽聽聽聽聽聽 then
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if sqlcode=-1843 then聽 /*sqlcode 鏄唴寤虹殑鐢ㄤ簬榪斿洖鏈榪戜竴嬈¢敊璇紪鍙風(fēng)殑鍑芥暟 */
聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽 鈥?.
榪欑殑紜槸涓孌佃浜烘劅鍒版櫐娑╃殑浠g爜錛岃繕鏄粰瀹冨叧鑱斾釜鍚嶅瓧鍚с?/span>
鎴戜滑瑕佺敤鍒扮殑鏄?/span> pragma exception_init(exception,integer) 錛岀劧鍚庡氨鍙互鍍忓寰呴瀹氫箟寮傚父涓鏍峰寰呭畠浜?jiǎn)锛屾垜鏄娌″繀瑕佸儚涓婇潰鐨勯偅绉嶄竴鏍風(fēng)敤 raise 銆?/span> Exception_init 鏄竴涓紪璇戞椂榪愯鐨勫嚱鏁幫紝瀹冨彧鑳藉嚭鐜板湪浠g爜鐨勫0鏄庨儴鍒嗭紝鑰屽紓甯稿悕瀛楀繀欏誨湪姝や箣鍓嶈瀹氫箟銆備笅闈㈢敤涓涓尶鍚嶈繃紼嬩婦涓緥瀛愶細(xì)
聽聽聽聽聽聽 declare
聽聽聽聽聽聽 聽聽聽聽聽聽 invalid_company_id exception;
聽聽聽聽聽聽 聽聽聽聽聽聽 pragma exception_init(invalid_company_id, -1834);
瑕佹敞鎰忕殑鏃訛細(xì)
眉聽聽聽聽聽聽聽聽 涓嶅彲浠ョ敤 -1403 錛?/span> no_data_found 錛夛紝鐢?/span> 100 錛屼簨瀹炰笂 exception_init 涓殑 integer 瀵瑰簲鐨勬槸 sqlcode 榪斿洖鐨勫箋?/span>
眉聽聽聽聽聽聽聽聽 涓嶈兘涓?/span> 0 錛屼笉鑳藉ぇ浜?/span> 100 錛屼笉鑳藉皬浜?/span> -1000000
涓涓緥瀛愶細(xì)
聽聽聽聽聽聽 procedure delete_company(company_id_in in number)
聽聽聽聽聽聽 is
聽聽聽聽聽聽 聽聽聽聽聽聽 still_have_emplyee exception;
聽聽聽聽聽聽 聽聽聽聽聽聽 pragma exception(still_have_employee, -2293);
聽聽聽聽聽聽 begin
聽聽聽聽聽聽聽聽聽聽聽聽聽 delete from compamy
聽聽聽聽聽聽聽聽聽聽聽聽聽 where company_id=company_id_in;
聽聽聽聽聽聽 exception
聽聽聽聽聽聽聽聽聽聽聽聽聽 when still_have_employee
聽聽聽聽聽聽聽聽聽聽聽聽聽 then dbms_output.put_line(鈥榙elete employees for company first鈥?;
聽聽聽聽聽聽 end;
鍦ㄤ竴涓嬩袱縐嶆儏鍐典笅錛屾垜浠湁蹇呰浣跨敤 exception_init 錛?/span>
眉聽聽聽聽聽聽聽聽 涓涓潪棰勫畾涔夊紓甯告槸緇忓父瑕佽鐢ㄥ埌鐨勩?/span>
眉聽聽聽聽聽聽聽聽 鎴戜滑灝嗙敤 raise_applocation_error 浜х敓浜?jiǎn)涓涓嚜瀹氫箟鐨?/span> errorcode 鏃躲?/span>
涓縐嶇畝渚跨殑鏂規(guī)硶鏄皢浠ヤ笂涓ょ鎯呭喌涓殑寮傚父瀹氫箟鍦ㄤ竴涓寘涓紝榪欐牱鎴戜滑灝辨病鏈夊繀瑕佹瘡嬈¢兘閲嶅瀹氫箟浜?jiǎn)銆?/span>
聽聽聽聽聽聽 Create or replace package dynsql
聽聽聽聽聽聽 Is
聽聽聽聽聽聽 聽聽聽聽聽聽 Invalid_table_name exception;
聽聽聽聽聽聽 聽聽聽聽聽聽 Pragma exception_init(invalid_table_name, -903);
聽聽聽聽聽聽 聽聽聽聽聽聽 Invalid_column_name exception;
聽聽聽聽聽聽 聽聽聽聽聽聽 Pragma exception_init(invalid_column_name, -904);
聽聽聽聽聽聽 聽聽聽聽聽聽 En_too_young const number:=-200001;
聽聽聽聽聽聽 聽聽聽聽聽聽 Exc_too_young exception;
聽聽聽聽聽聽 聽聽聽聽聽聽 Pragma exception_init(exc_too_young, -20001);
聽聽聽聽聽聽 End;
鏈変簡(jiǎn)涓婇潰榪欎釜鍖咃紝灝卞彲浠ユ柟渚跨殑澶勭悊寮傚父浜?/span> ;
聽聽聽聽聽聽 procedure validate_emp(birthdate in date)
聽聽聽聽聽聽 is
聽聽聽聽聽聽 聽聽聽聽聽聽 min_tear const pls_integer:=18;
聽聽聽聽聽聽 begin
聽聽聽聽聽聽聽聽聽聽聽聽聽 if add_month(sysdate,min_year*12*-1)<birthdate_in
聽聽聽聽聽聽聽聽聽聽聽聽聽 then
raise_application_error(dynsql.en_too_young, 鈥榚mployee must be鈥?|| min_year ||鈥榦ld鈥?;
聽聽聽聽聽聽聽聽聽聽聽聽聽 end if;
聽聽聽聽聽聽 end;
闄や簡(jiǎn) standard 鍖呬腑鐨?/span> 21 涓瀹氫箟寮傚父澶栵紝榪樻湁涓浜涘寘涔熷畾涔変簡(jiǎn)涓浜涘紓甯搞備絾涓?/span> standard 鍖呬腑寮傚父涓嶅悓鐨勬槸錛屽湪浣跨敤榪欎簺寮傚父鏃訛紝闇瑕佸甫涓婂寘鐨勫悕瀛椼傚錛?/span>
聽聽聽聽聽聽 when dbms_lob.invalid_argval then 鈥︹?/span>
聽
闈炲父鏈夌敤鐨勪竴鐐規(guī)槸錛屽彲浠ュ湪鏈澶栧眰鐨?/span> pl/sql 鍧楃殑寮傚父澶勭悊妯″潡涓姞鍏?/span> others 錛岃繖鏍峰氨鍙互鎶婁粠鍐呴儴浼犻掑嚭鏉ョ殑鏈澶勭悊鐨勫墿浣欏紓甯稿叏閮ㄥ鐞嗘帀浜?jiǎn)銆?/span>
聽聽聽聽聽聽 Exception
聽聽聽聽聽聽 When others
聽聽聽聽聽聽 聽聽聽聽聽聽 Then 鈥?
|
闅愬紡娓告爣
|
鏄懼紡娓告爣
|
|
PL/SQL
緇存姢錛屽綋鎵ц鏌ヨ鏃惰嚜鍔ㄦ墦寮鍜屽叧闂?/span>
|
鍦ㄧ▼搴忎腑鏄懼紡瀹氫箟銆佹墦寮銆佸叧闂紝娓告爣鏈変竴涓悕瀛椼?/span>
|
|
娓告爣灞炴у墠緙鏄?/span>
SQL
|
娓告爣灞炴х殑鍓嶇紑鏄父鏍囧悕
|
|
灞炴?/span>
%ISOPEN
鎬繪槸涓?/span>
FALSE
|
%ISOPEN
鏍規(guī)嵁娓告爣鐨勭姸鎬佺‘瀹氬?/span>
|
|
SELECT
璇彞甯︽湁
INTO
瀛愪覆錛屽彧鏈変竴琛屾暟鎹澶勭悊
|
鍙互澶勭悊澶氳鏁版嵁錛屽湪紼嬪簭涓緗驚鐜紝鍙栧嚭姣忎竴琛屾暟鎹?/span>
|
DECLARE R_emp EMP % ROWTYPE; CURSOR c_emp IS SELECT * FROM emp;
DECLARE CURSOR c_emp IS SELECT ename,salary FROM emp;R_emp c_emp % ROWTYPE;
FOR record_name IN (corsor_name [ (parameter[,parameter ] ...)] | (query_difinition)LOOPstatements END LOOP;
| IF condition THEN 銆Statements 1; 銆Statements 2; 銆.... END IF |
| IF condition THEN 銆Statements 1; 銆Statements 2; 銆.... ELSE 銆Statements 1; 銆Statements 2; 銆.... END IF |
| if (a>b) and (a>c) then 銆銆g:=a; else 銆銆g:=b; 銆銆if c>g then 銆銆銆g:=c; 銆銆end if end if |
| IF condition1 THEN 銆statement1; ELSIF condition2 THEN 銆statement2; ELSIF condition3 THEN 銆statement3; ELSE 銆statement4; END IF; 銆statement5; |
| X:=100; LOOP 銆X:=X+10; 銆IF X>1000 THEN 銆銆EXIT; 銆END IF END LOOP; Y:=X; |
| X:=100; LOOP X:=X+10; EXIT WHEN X>1000; X:=X+10; END LOOP; Y:=X; |
| X:=100; WHILE X<=1000 LOOP 銆X:=X+10; END LOOP; Y=X; |
| FOR counter IN [REVERSE] start_range....end_range LOOP statements; END LOOP; |
| X:=100; FOR v_counter in 1..10 loop x:=x+10; end loop y:=x; |
| Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression] |
| ZERO_VALUE CONSTANT NUMBER:=0; |
| Datatype | Range | Subtypes | description |
| BINARY_INTEGER | -214748-2147483647 | NATURAL NATURAL NPOSITIVE POSITIVEN SIGNTYPE | 鐢ㄤ簬瀛樺偍鍗曞瓧鑺傛暣鏁般?br />瑕佹眰瀛樺偍闀垮害浣庝簬NUMBER鍊箋?br />鐢ㄤ簬闄愬埗鑼冨洿鐨勫瓙綾誨瀷(SUBTYPE): 銆NATURAL:鐢ㄤ簬闈炶礋鏁?br />銆POSITIVE:鍙敤浜庢鏁?br />銆NATURALN:鍙敤浜庨潪璐熸暟鍜岄潪NULL鍊?br />銆POSITIVEN:鍙敤浜庢鏁幫紝涓嶈兘鐢ㄤ簬NULL鍊?br />銆SIGNTYPE:鍙湁鍊?-1銆?鎴?. |
| NUMBER | 1.0E-130-9.99E125 | DEC DECIMAL DOUBLE PRECISION FLOAT INTEGERIC INT NUMERIC REAL SMALLINT | 瀛樺偍鏁板瓧鍊鹼紝鍖呮嫭鏁存暟鍜屾誕鐐規(guī)暟銆傚彲浠ラ夋嫨綺懼害鍜屽埢搴︽柟寮忥紝璇硶錛?br />number[錛?precision>[, |
| PLS_INTEGER | -2147483647-2147483647 | 聽 | 涓嶣INARY_INTEGER鍩烘湰鐩稿悓錛屼絾閲囩敤鏈哄櫒榪愮畻鏃訛紝PLS_INTEGER鎻愪緵鏇村ソ鐨勬ц兘 銆?/td> |
| datatype | rang | subtype | description |
| CHAR | 鏈澶ч暱搴?2767瀛楄妭 | CHARACTER | 瀛樺偍瀹氶暱瀛楃涓詫紝濡傛灉闀垮害娌℃湁紜畾錛岀己鐪佹槸1 |
| LONG | 鏈澶ч暱搴?147483647瀛楄妭 | 聽 | 瀛樺偍鍙彉闀垮害瀛楃涓?/td> |
| RAW | 鏈澶ч暱搴?2767瀛楄妭 | 聽 | 鐢ㄤ簬瀛樺偍浜岃繘鍒舵暟鎹拰瀛楄妭瀛楃涓詫紝褰撳湪涓や釜鏁版嵁搴撲箣闂磋繘琛屼紶閫掓椂錛孯AW鏁版嵁涓嶅湪瀛楃闆嗕箣闂磋繘琛岃漿鎹€?/td> |
| LONGRAW | 鏈澶ч暱搴?147483647 | 聽 | 涓嶭ONG鏁版嵁綾誨瀷鐩鎬技錛屽悓鏍蜂粬涔熶笉鑳藉湪瀛楃闆嗕箣闂磋繘琛岃漿鎹€?/td> |
| ROWID | 18涓瓧鑺?/td> | 聽 | 涓庢暟鎹簱ROWID浼垪綾誨瀷鐩稿悓錛岃兘澶熷瓨鍌ㄤ竴涓鏍囩ず絎︼紝鍙互灝嗚鏍囩ず絎︾湅浣滄暟鎹簱涓瘡涓琛岀殑鍞竴閿箋?/td> |
| VARCHAR2 | 鏈澶ч暱搴?2767瀛楄妭 | STRINGVARCHAR | 涓嶸ARCHAR鏁版嵁綾誨瀷鐩鎬技錛屽瓨鍌ㄥ彲鍙橀暱搴︾殑瀛楃涓層傚0鏄庢柟娉曚笌VARCHAR鐩稿悓 |
| datatype | range | description |
| BOOLEAN | TRUE/FALSE | 瀛樺偍閫昏緫鍊糡RUE鎴朏ALSE,鏃犲弬鏁?/td> |
| DATE | 01/01/4712 BC | 瀛樺偍鍥哄畾闀跨殑鏃ユ湡鍜屾椂闂村鹼紝鏃ユ湡鍊間腑鍖呭惈鏃墮棿 |
| operator | operation |
| + | 鍔?/td> |
| - | 鍑?/td> |
| / | 闄?/td> |
| * | 涔?/td> |
| ** | 涔樻柟 |
| operator | operation |
| < | 灝忎簬鎿嶄綔絎?/td> |
| <= | 灝忎簬鎴栫瓑浜庢搷浣滅 |
| > | 澶т簬鎿嶄綔絎?/td> |
| >= | 澶т簬鎴栫瓑浜庢搷浣滅 |
| = | 絳変簬鎿嶄綔絎? |
| != | 涓嶇瓑浜庢搷浣滅 |
| <> | 涓嶇瓑浜庢搷浣滅 |
| := | 璧嬪兼搷浣滅 |
| operator | operation |
| IS NULL | 濡傛灉鎿嶄綔鏁頒負(fù)NULL榪斿洖TRUE |
| LIKE | 姣旇緝瀛楃涓插?/td> |
| BETWEEN | 楠岃瘉鍊兼槸鍚﹀湪鑼冨洿涔嬪唴 |
| IN | 楠岃瘉鎿嶄綔鏁板湪璁懼畾鐨勪竴緋誨垪鍊間腑 |
| operator | operation |
| AND | 涓や釜鏉′歡閮藉繀欏繪弧瓚?/td> |
| OR | 鍙婊¤凍涓や釜鏉′歡涓殑涓涓?/td> |
| NOT | 鍙栧弽 |
| declare 銆v_comm_percent constant number:=10; begin 銆update emp 銆set comm=sal*v_comm_percent 銆where deptno=10; 銆end SQL> / PL/SQL procedure successfully completed. SQL> |
| create or replace procedure update_commission 銆(v_dept in number,v_pervent in number default 10) is begin 銆update emp 銆set comm=sal*v_percent 銆where deptno=v_dept; end SQL>/ Procedure created SQL>execute update_commission(10,15); PL/SQL procedure successfully completed. SQL> |
| declare 銆v_dept number; begin 銆select a.deptno 銆into v_dept 銆from emp a 銆where job='PRESIDENT' 銆update_commission(v_dept); end SQL>/ 銆PL/SQL procedure successfully completed SQL> |
| [DECLARE] ---declaration statements BEGIN ---executable statements [EXCEPTION] ---exception statements END |
| FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS [local declarations] BEGIN execute statements [EXCEPTION exception handlers] END [name] |
| PROCEDURE name [(parameter[,parameter,...])] IS [local declarations] BEGIN execute statements [EXCEPTION exception handlers ] END [name] |
鍏堝緩搴忓垪,鐒跺悗寤虹珛涓涓Е鍙戝櫒瀹炵幇!
cata0鏄〃鍚?cata0_id鏄渶瑕佽嚜澧炵殑瀛楁!
CREATE SEQUENCE SEQ_cata0
聽I(yíng)NCREMENT BY聽 1
聽START WITH聽 1
聽MAXVALUE聽 9999999
CREATE TRIGGER TRG_cata0 BEFORE
INSERT聽 ON cata0
FOR EACH ROW begin
聽聽 SELECT SEQ_cata0.NEXTVAL
聽聽聽聽 INTO :NEW.cata0_ID
聽聽聽聽 FROM DUAL;
End TRG_cata0;