ÓαêÖеÄ×Ó²éѯ Óï·¨ÈçÏ£º
¿ÉÒÔ¿´³öÓë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Óï¾äÒ»´Î·µ»ØÖ¸ÕëËùÖ¸µÄÒ»ÐÐÊý¾Ý£¬Òª·µ»Ø¶àÐÐÐèÖØ¸´Ö´ÐУ¬¿ÉÒÔʹÓÃÑ»·Óï¾äÀ´ÊµÏÖ¡£¿ØÖÆÑ»·¿ÉÒÔͨ¹ýÅжÏÓαêµÄÊôÐÔÀ´½øÐС£