OracleÓαêʹÓ÷½·¨¼°Óï·¨´óÈ«

ÓαêÖеÄ×Ó²éѯ Óï·¨ÈçÏ£º

¿ÉÒÔ¿´³öÓëSQLÖеÄ×Ó²éѯÓÐÃ»Ê²Ã´Çø±ð¡£

ÓαêÖеĸüкÍɾ³ý

ÔÚPL/SQLÖÐÒÀÈ»¿ÉÒÔʹÓÃUPDATEºÍDELETEÓï¾ä¸üлòɾ³ýÊý¾ÝÐС£ÏÔʾÓαêÖ»ÓÐÔÚÐèÒª»ñµÃ¶àÐÐÊý¾ÝµÄÇé¿öÏÂʹÓá£PL/SQLÌṩÁ˽ö½öʹÓÃÓαê¾Í¿ÉÒÔÖ´ÐÐɾ³ý»ò¸üмǼµÄ·½·¨¡£

UPDATE»òDELETEÓï¾äÖеÄWHERE CURRENT OF×Ó´®×¨ÃÅ´¦ÀíÒªÖ´ÐÐUPDATE»òDELETE²Ù×÷µÄ±íÖÐÈ¡³öµÄ×î½üµÄÊý¾Ý¡£ÒªÊ¹ÓÃÕâ¸ö·½·¨£¬ÔÚÉùÃ÷Óαêʱ±ØÐëʹÓÃFOR UPDATE×Ó´®£¬µ±¶Ô»°Ê¹ÓÃFOR UPDATE×Ó´®´ò¿ªÒ»¸öÓαêʱ£¬ËùÓзµ»Ø¼¯ÖеÄÊý¾ÝÐж¼½«´¦ÓÚÐм¶£¨ROW-LEVEL)¶ÀÕ¼Ê½Ëø¶¨£¬ÆäËû¶ÔÏóÖ»ÄܲéѯÕâЩÊý¾ÝÐУ¬²»ÄܽøÐÐUPDATE¡¢DELETE»òSELECT...FOR UPDATE²Ù×÷¡£

Óï·¨£º

ÔÚ¶à±í²éѯÖУ¬Ê¹ÓÃOF×Ô¾ÓÀ´Ëø¶¨Ìض¨µÄ±í£¬Èç¹ûºöÂÔÁËOF×Ӿ䣬ÄÇôËùÓбíÖÐÑ¡ÔñµÄÊý¾ÝÐж¼½«±»Ëø¶¨¡£Èç¹ûÕâЩÊý¾ÝÐÐÒѾ­±»ÆäËû»á»°Ëø¶¨£¬ÄÇôÕý³£Çé¿öÏÂoracle½«µÈ´ý£¬Ö±µ½Êý¾ÝÐнâËø¡£

ÔÚUPDATEºÍDELETEÖÐʹÓÃWHERE CURRENT OF×Ó´®µÄÓï·¨ÈçÏ£º WHERE {CURRENT OF cursor_name|search_condition} ʵÀý:

DELCARE

CURSOR c1 IS

SELECT empno,salary FROM emp WHERE comm IS NULL FOR UPDATE OF comm; v_comm NUMBER(10,2);

BEGIN

FOR r1 IN c1 LOOP IF r1.salary<500 THEN v_comm:=r1.salary*0.25; ELSEIF r1.salary<1000 THEN v_comm:=r1.salary*0.20; ELSEIF r1.salary<3000 THEN v_comm:=r1.salary*0.15; ELSE v_comm:=r1.salary*0.12; END IF;

UPDATE emp

SET comm=v_comm

WHERE CURRENT OF c1;

END LOOP; END

=====================================================

oracle ÒþʽÓαê,ÏÔʾÓαê,ÓαêÑ­»· ¶¯Ì¬SELECTÓï¾äºÍ¶¯Ì¬Óαê,Òì³£´¦Àí,×Ô¶¨ÒåÒì³£

ÓαêµÄ¸ÅÄî:

ÓαêÊÇSQLµÄÒ»¸öÄڴ湤×÷Çø£¬ÓÉϵͳ»òÓû§ÒÔ±äÁ¿µÄÐÎʽ¶¨Òå¡£ÓαêµÄ×÷ÓþÍÊÇÓÃÓÚÁÙʱ´æ´¢´ÓÊý¾Ý¿âÖÐÌáÈ¡µÄÊý¾Ý¿é¡£ÔÚijЩÇé¿öÏ£¬ÐèÒª°ÑÊý¾Ý´Ó´æ·ÅÔÚ´ÅÅ̵ıíÖе÷µ½¼Æ

Ëã»úÄÚ´æÖнøÐд¦Àí£¬×îºó½«´¦Àí½á¹ûÏÔʾ³öÀ´»ò×îÖÕд»ØÊý¾Ý¿â¡£ÕâÑùÊý¾Ý´¦ÀíµÄËٶȲŻáÌá¸ß£¬·ñÔòƵ·±µÄ´ÅÅÌÊý¾Ý½»»»»á½µµÍЧÂÊ¡£

ÓαêÓÐÁ½ÖÖÀàÐÍ£ºÏÔʽÓαêºÍÒþʽÓαꡣÔÚǰÊö³ÌÐòÖÐÓõ½µÄSELECT...INTO...²éѯÓï¾ä£¬Ò»´ÎÖ»ÄÜ´ÓÊý¾Ý¿âÖÐÌáȡһÐÐÊý¾Ý£¬¶ÔÓÚÕâÖÖÐÎʽµÄ²éѯºÍDML²Ù×÷£¬ÏµÍ³¶¼»áʹÓÃÒ»¸öÒþʽÓαꡣµ«ÊÇÈç¹ûÒªÌáÈ¡¶àÐÐÊý¾Ý£¬¾ÍÒªÓɳÌÐòÔ±¶¨ÒåÒ»¸öÏÔʽÓα꣬²¢Í¨¹ýÓëÓαêÓйصÄÓï¾ä½øÐд¦Àí¡£ÏÔʽÓαê¶ÔÓ¦Ò»¸ö·µ»Ø½á¹ûΪ¶àÐжàÁеÄSELECTÓï¾ä¡£ ÓαêÒ»µ©´ò¿ª£¬Êý¾Ý¾Í´ÓÊý¾Ý¿âÖд«Ë͵½Óαê±äÁ¿ÖУ¬È»ºóÓ¦ÓóÌÐòÔÙ´ÓÓαê±äÁ¿Öзֽâ³öÐèÒªµÄÊý¾Ý£¬²¢½øÐд¦Àí¡£

ÒþʽÓα꣺

ÈçǰËùÊö£¬DML²Ù×÷ºÍµ¥ÐÐSELECTÓï¾ä»áʹÓÃÒþʽÓα꣬ËüÃÇÊÇ£º * ²åÈë²Ù×÷£ºINSERT¡£ * ¸üвÙ×÷£ºUPDATE¡£ * ɾ³ý²Ù×÷£ºDELETE¡£

* µ¥Ðвéѯ²Ù×÷£ºSELECT ... INTO ...¡£ µ±ÏµÍ³Ê¹ÓÃÒ»¸öÒþʽÓαêʱ£¬¿ÉÒÔͨ¹ýÒþʽÓαêµÄÊôÐÔÀ´Á˽â²Ù×÷µÄ״̬ºÍ½á¹û£¬½ø¶ø¿ØÖƳÌÐòµÄÁ÷³Ì¡£ÒþʽÓαê¿ÉÒÔʹÓÃÃû×ÖSQLÀ´·ÃÎÊ£¬µ«Òª×¢Ò⣬ͨ¹ýSQLÓαêÃû×ÜÊÇÖ»ÄÜ·ÃÎÊǰһ¸öDML²Ù×÷»òµ¥ÐÐSELECT²Ù×÷µÄÓαêÊôÐÔ¡£ËùÒÔͨ³£ÔÚ¸Õ¸ÕÖ´ÐÐÍê²Ù×÷Ö®ºó£¬Á¢¼´Ê¹ÓÃSQLÓαêÃûÀ´·ÃÎÊÊôÐÔ¡£ÓαêµÄÊôÐÔÓÐËÄÖÖ£¬ÈçÏÂËùʾ¡£ Sql´úÂ룺

ÒþʽÓαêµÄÊôÐÔ ·µ»ØÖµÀàÐÍ ÒâÒå

1. SQL%ROWCOUNT ÕûÐÍ ´ú±íDMLÓï¾ä³É¹¦Ö´ÐеÄÊý¾ÝÐÐÊý 2. SQL%FOUND ²¼¶ûÐÍ ÖµÎªTRUE´ú±í²åÈ롢ɾ³ý¡¢¸üлòµ¥Ðвéѯ²Ù×÷³É¹¦ 3. SQL%NOTFOUND ²¼¶ûÐÍ ÓëSQL%FOUNDÊôÐÔ·µ»ØÖµÏà·´ 4. SQL%ISOPEN ²¼¶ûÐÍ DMLÖ´Ðйý³ÌÖÐÎªÕæ£¬½áÊøºóΪ¼Ù

¡¾ÑµÁ·1¡¿ ʹÓÃÒþʽÓαêµÄÊôÐÔ£¬Åж϶ԹÍÔ±¹¤×ʵÄÐÞ¸ÄÊÇ·ñ³É¹¦¡£ ²½Öè1£ºÊäÈëºÍÔËÐÐÒÔϳÌÐò£º Sql´úÂ룺

1. SET SERVEROUTPUT ON

2. BEGIN

3. UPDATE emp SET sal=sal+100 WHERE empno=1234; 4. IF SQL%FOUND THEN

5. DBMS_OUTPUT.PUT_LINE('³É¹¦Ð޸ĹÍÔ±¹¤×Ê£¡'); 6. COMMIT;

7. ELSE

8. DBMS_OUTPUT.PUT_LINE('Ð޸ĹÍÔ±¹¤×Êʧ°Ü£¡');

9. END IF; 10. END;

ÔËÐнá¹ûΪ£º Sql´úÂ룺

1. Ð޸ĹÍÔ±¹¤×Êʧ°Ü£¡

2. PL/SQL ¹ý³ÌÒѳɹ¦Íê³É¡£

²½Öè2£º½«¹ÍÔ±±àºÅ1234¸ÄΪ7788£¬ÖØÐÂÖ´ÐÐÒÔÉϳÌÐò£º ÔËÐнá¹ûΪ£º Sql´úÂ룺

1. ³É¹¦Ð޸ĹÍÔ±¹¤×Ê£¡

2. PL/SQL ¹ý³ÌÒѳɹ¦Íê³É¡£

˵Ã÷£º±¾ÀýÖУ¬Í¨¹ýSQL%FOUNDÊôÐÔÅжÏÐÞ¸ÄÊÇ·ñ³É¹¦£¬²¢¸ø³öÏàÓ¦ÐÅÏ¢¡£

ÏÔʽÓα꣺

ÓαêµÄ¶¨ÒåºÍ²Ù×÷

ÓαêµÄʹÓ÷ֳÉÒÔÏÂ4¸ö²½Öè¡£

1£®ÉùÃ÷Óαê

ÔÚDECLEAR²¿·Ö°´ÒÔϸñʽÉùÃ÷Óα꣺

CURSOR ÓαêÃû[(²ÎÊý1 Êý¾ÝÀàÐÍ[£¬²ÎÊý2 Êý¾ÝÀàÐÍ...])]

IS SELECTÓï¾ä; ²ÎÊýÊÇ¿ÉÑ¡²¿·Ö£¬Ëù¶¨ÒåµÄ²ÎÊý¿ÉÒÔ³öÏÖÔÚSELECTÓï¾äµÄWHERE×Ó¾äÖС£Èç¹û¶¨ÒåÁ˲ÎÊý£¬Ôò±ØÐëÔÚ´ò¿ªÓαêʱ´«µÝÏàÓ¦µÄʵ¼Ê²ÎÊý¡£

SELECTÓï¾äÊǶԱí»òÊÓͼµÄ²éѯÓï¾ä£¬ÉõÖÁÒ²¿ÉÒÔÊÇÁªºÏ²éѯ¡£¿ÉÒÔ´øWHEREÌõ¼þ¡¢ORDER BY»òGROUP BYµÈ×Ӿ䣬µ«²»ÄÜʹÓÃINTO×Ӿ䡣ÔÚSELECTÓï¾äÖпÉÒÔʹÓÃÔÚ¶¨ÒåÓαê֮ǰ¶¨ÒåµÄ±äÁ¿¡£ 2£®´ò¿ªÓαê

ÔÚ¿ÉÖ´Ðв¿·Ö£¬°´ÒÔϸñʽ´ò¿ªÓα꣺

OPEN ÓαêÃû[(ʵ¼Ê²ÎÊý1[£¬Êµ¼Ê²ÎÊý2...])];

´ò¿ªÓαêʱ£¬SELECTÓï¾äµÄ²éѯ½á¹û¾Í±»´«Ë͵½ÁËÓα깤×÷Çø¡£ 3£®ÌáÈ¡Êý¾Ý

ÔÚ¿ÉÖ´Ðв¿·Ö£¬°´ÒÔϸñʽ½«Óα깤×÷ÇøÖеÄÊý¾ÝÈ¡µ½±äÁ¿ÖС£ÌáÈ¡²Ù×÷±ØÐëÔÚ´ò¿ªÓαêÖ®ºó½øÐС£

FETCH ÓαêÃû INTO ±äÁ¿Ãû1[£¬±äÁ¿Ãû2...]; »ò

FETCH ÓαêÃû INTO ¼Ç¼±äÁ¿;

Óαê´ò¿ªºóÓÐÒ»¸öÖ¸ÕëÖ¸ÏòÊý¾ÝÇø£¬FETCHÓï¾äÒ»´Î·µ»ØÖ¸ÕëËùÖ¸µÄÒ»ÐÐÊý¾Ý£¬Òª·µ»Ø¶àÐÐÐèÖØ¸´Ö´ÐУ¬¿ÉÒÔʹÓÃÑ­»·Óï¾äÀ´ÊµÏÖ¡£¿ØÖÆÑ­»·¿ÉÒÔͨ¹ýÅжÏÓαêµÄÊôÐÔÀ´½øÐС£

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)