ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

PL/SQLÒì³£´íÎó´¦Àí(Ò»)
2014-11-23 19:02:38 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:55´Î
Tags£ºPL/SQL Òì³£ ´íÎó ´¦Àí

Òì³£´íÎó´¦Àí
Ò»¸öÓÅÐãµÄ³ÌÐò¶¼Ó¦¸ÃÄܹ»ÕýÈ·´¦Àí¸÷ÖÖ³ö´íÇé¿ö£¬²¢¾¡¿ÉÄÜ´Ó´íÎóÖлָ´¡£ORACLE ÌṩÒì³£Çé¿ö(EXCEPTION)ºÍÒì³£´¦Àí(EXCEPTION HANDLER)À´ÊµÏÖ´íÎó´¦Àí

¢ÙÓÐÈýÖÖÀàÐ͵ÄÒì³£´íÎó£º
1£® Ô¤¶¨Òå( Predefined )´íÎó
ORACLEÔ¤¶¨ÒåµÄÒì³£Çé¿ö´óÔ¼ÓÐ24¸ö¡£¶ÔÕâÖÖÒì³£Çé¿öµÄ´¦Àí£¬ÎÞÐèÔÚ³ÌÐòÖж¨Ò壬ÓÉORACLE×Ô¶¯½«ÆäÒý·¢¡£

2£® ·ÇÔ¤¶¨Òå( Predefined )´íÎó
¼´ÆäËû±ê×¼µÄORACLE´íÎó¡£¶ÔÕâÖÖÒì³£Çé¿öµÄ´¦Àí£¬ÐèÒªÓû§ÔÚ³ÌÐòÖж¨Ò壬ȻºóÓÉORACLE×Ô¶¯½«ÆäÒý·¢¡£

3£® Óû§¶¨Òå(User_define) ´íÎó
³ÌÐòÖ´Ðйý³ÌÖУ¬³öÏÖ±à³ÌÈËÔ±ÈÏΪµÄ·ÇÕý³£Çé¿ö¡£¶ÔÕâÖÖÒì³£Çé¿öµÄ´¦Àí£¬ÐèÒªÓû§ÔÚ³ÌÐòÖж¨Ò壬ȻºóÏÔʽµØÔÚ³ÌÐòÖн«ÆäÒý·¢¡£

¢ÚÒì³£´¦Àí²¿·ÖÒ»°ã·ÅÔÚPL/SQL ³ÌÐòÌåµÄºó°ë²¿,½á¹¹Îª:

EXCEPTION
WHEN first_exception THEN
WHEN second_exception THEN
WHEN OTHERS THEN 
END;


Òì³£´¦Àí¿ÉÒÔ°´ÈÎÒâ´ÎÐòÅÅÁÐ,µ«OTHERS ±ØÐë·ÅÔÚ×îºó.

¢ÛÔ¤¶¨ÒåµÄÒì³£´¦Àí
¶ÔÕâÖÖÒì³£Çé¿öµÄ´¦Àí£¬Ö»ÐèÔÚPL/SQL¿éµÄÒì³£´¦Àí²¿·Ö£¬Ö±½ÓÒýÓÃÏàÓ¦µÄÒì³£Çé¿öÃû£¬²¢¶ÔÆäÍê³ÉÏàÓ¦µÄÒì³£´íÎó´¦Àí¼´¿É¡£

[Ô¤¶¨ÒåÒì³£]

declare

v_sal employees.salary%type;
begin
select salary into v_sal
from employees
where employee_id >100;

dbms_output.put_line(v_sal);

exception
when Too_many_rows then dbms_output.put_line('Êä³öµÄÐÐÊýÌ«¶àÁË');
end;

¢Ü·ÇÔ¤¶¨ÒåµÄÒì³£´¦Àí
¶ÔÓÚÕâÀàÒì³£Çé¿öµÄ´¦Àí£¬Ê×ÏȱØÐë¶Ô·Ç¶¨ÒåµÄORACLE´íÎó½øÐж¨Òå¡£²½ÖèÈçÏ£º
1. ÔÚPL/SQL ¿éµÄ¶¨Ò岿·Ö¶¨ÒåÒì³£Çé¿ö£º
<Òì³£Çé¿ö> EXCEPTION;

2. ½«Æä¶¨ÒåºÃµÄÒì³£Çé¿ö£¬Óë±ê×¼µÄORACLE´íÎóÁªÏµÆðÀ´£¬Ê¹ÓÃPRAGMA EXCEPTION_INIT Óï¾ä£º
PRAGMA EXCEPTION_INIT(<Òì³£Çé¿ö>, <´íÎó´úÂë>);

3. ÔÚPL/SQL ¿éµÄÒì³£Çé¿ö´¦Àí²¿·Ö¶ÔÒì³£Çé¿ö×ö³öÏàÓ¦µÄ´¦Àí¡£

[·ÇÔ¤¶¨ÒåÒì³£]

declare

v_sal employees.salary%type;
--ÉùÃ÷Ò»¸öÒì³£
delete_mgr_excep exception;
--°Ñ×Ô¶¨ÒåµÄÒì³£ºÍoracleµÄ´íÎó¹ØÁªÆðÀ´
PRAGMA EXCEPTION_INIT(delete_mgr_excep,-2292);
begin
delete from employees
where employee_id = 100;

select salary into v_sal
from employees
where employee_id >100;

dbms_output.put_line(v_sal);

exception
when Too_many_rows then dbms_output.put_line('Êä³öµÄÐÐÊýÌ«¶àÁË');
when delete_mgr_excep then dbms_output.put_line('Manager²»ÄÜÖ±½Ó±»É¾³ý');
end;

¢ÝÓû§×Ô¶¨ÒåµÄÒì³£´¦Àí
µ±ÓëÒ»¸öÒì³£´íÎóÏà¹ØµÄ´íÎó³öÏÖʱ£¬¾Í»áÒþº¬´¥·¢¸ÃÒì³£´íÎó¡£Óû§¶¨ÒåµÄÒì³£´íÎóÊÇͨ¹ýÏÔʽʹÓÃRAISEÓï¾äÀ´´¥·¢¡£µ±Òý·¢Ò»¸öÒì³£´íÎóʱ£¬¿ØÖƾÍתÏòµ½EXCEPTION¿éÒì³£´íÎ󲿷֣¬Ö´ÐдíÎó´¦Àí´úÂë¡£
¶ÔÓÚÕâÀàÒì³£Çé¿öµÄ´¦Àí£¬²½ÖèÈçÏ£º
1£® ÔÚPL/SQL ¿éµÄ¶¨Ò岿·Ö¶¨ÒåÒì³£Çé¿ö£º

<Òì³£Çé¿ö> EXCEPTION;
2£® RAISE <Òì³£Çé¿ö>£»

3£® ÔÚPL/SQL ¿éµÄÒì³£Çé¿ö´¦Àí²¿·Ö¶ÔÒì³£Çé¿ö×ö³öÏàÓ¦µÄ´¦Àí¡£

[Óû§×Ô¶¨ÒåÒì³£]

declare

v_sal employees.salary%type;
--ÉùÃ÷Ò»¸öÒì³£
delete_mgr_excep exception;
--°Ñ×Ô¶¨ÒåµÄÒì³£ºÍoracleµÄ´íÎó¹ØÁªÆðÀ´
PRAGMA EXCEPTION_INIT(delete_mgr_excep,-2292);

--ÉùÃ÷Ò»¸öÒì³£
too_high_sal exception;
begin

select salary into v_sal
from employees
where employee_id =100;

if v_sal > 1000 then
raise too_high_sal;
end if;

delete from employees
where employee_id = 100;

dbms_output.put_line(v_sal);

exception
when Too_many_rows then dbms_output.put_line('Êä³öµÄÐÐÊýÌ«¶àÁË');
when delete_mgr_excep then dbms_output.put_line('Manager²»ÄÜÖ±½Ó±»É¾³ý');
--´¦ÀíÒì³£
when too_high_sal then dbms_output.put_line('¹¤×ʹý¸ßÁË');
end;

¢ÞÔÚPL/SQL ÖÐʹÓÃSQLCODE, SQLERRM

SQLCODE ·µ»Ø´íÎó´úÂëÊý×Ö
SQLERRM ·µ»Ø´íÎóÐÅÏ¢.

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||¡¯---¡®||SQLERRM);

¢ßÒì³£³ÌÐò:

1.ͨ¹ý select ... into ... ²éѯijÈ˵Ť×Ê, ÈôûÓвéѯµ½, ÔòÊä³ö "δÕÒµ½Êý¾Ý"

declare
--¶¨ÒåÒ»¸ö±äÁ¿
v_sal employees.salary%type;
begin
--ʹÓà select ... into ... Ϊ v_sal ¸³Öµ
select salary into v_sal from employees where employee_id = 1000;
dbms_output.put_line('salary:¡¡' || v_sal);
exception
when No_data_found then
dbms_output.put_line('δÕÒµ½Êý¾Ý');
end;

»ò
declare
--¶¨ÒåÒ»¸ö±äÁ¿
v_sal employees.salary%type;
begin
--ʹÓà select ... into ... Ϊ v_sal ¸³Öµ
select salary into v_sal from employees;
dbms_output.put_line('salary:¡¡' || v_sal);
exception
when No_data_found then
dbms_output.put_line('δÕÒµ½Êý¾Ý!');
when Too_many_rows then
dbms_output.put_line('Êý¾Ý¹ý¶à!');
end;

2. ¸üÐÂÖ¸¶¨Ô±¹¤¹¤×Ê£¬È繤×ÊСÓÚ300£¬Ôò¼Ó100£»¶Ô NO_DATA_FO

Ê×Ò³ ÉÏÒ»Ò³ 1 2 ÏÂÒ»Ò³ βҳ 1/2/2
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºPL/SQLÓαêµÄʹÓà ÏÂһƪ£º¡¾sqlÓï¾ä¡¿ºÃÓõÄsqlÓï¾ä¨DÊʺÏ×..

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ: