;
帖子
3919 
精华
积分
11710 
鱼币
0 ¥ 
来自
大连 
在线时间
1858 小时 
注册时间
2007-6-11 
最后登录
2009-10-20 

贴图大师勋章新人进步勋章宣传大使勋章论坛元老勋章

3
发表于 2009-1-5 19:48 | 只看该作者
Oracle鏁版嵁搴撴父鏍囦娇鐢ㄥぇ鍏(3) - 缂栫▼搴 - Powered by SupeSite

浣犵殑浣嶇疆锛缂栫▼搴 >> 璧勮 >> Oracle >> oracel鍩虹 >> 璇︾粏鍐呭 鍦ㄧ嚎鎶曠ǹ

Oracle鏁版嵁搴撴父鏍囦娇鐢ㄥぇ鍏(3)

鍙戝竷: 2008-11-30 16:20 |  浣滆: 缃戠粶杞浇 |   鏉ユ簮: 缃戠粶杞浇 |  鏌ョ湅: 17娆

娓告爣FOR寰幆鍦ㄥぇ澶氭暟鏃跺欐垜浠湪璁捐绋嬪簭鐨勬椂鍊欓兘閬靛惊涓嬮潰鐨勬楠わ細
1銆佹墦寮娓告爣2銆佸紑濮嬪惊鐜3銆佷粠娓告爣涓彇鍊4銆佹鏌ラ偅涓琛岃杩斿洖5銆佸鐞6銆佸叧闂惊鐜7銆佸叧闂父鏍囧彲浠ョ畝鍗曠殑鎶婅繖涓绫讳唬鐮佺О涓烘父鏍囩敤浜庡惊鐜備絾杩樻湁涓绉嶅惊鐜笌杩欑绫诲瀷涓嶇浉鍚岋紝杩欏氨鏄疐OR寰幆锛岀敤浜嶧OR寰幆鐨勬父鏍囨寜鐓ф甯哥殑澹版槑鏂瑰紡澹版槑锛屽畠鐨勪紭鐐瑰湪浜庝笉闇瑕佹樉寮忕殑鎵撳紑銆佸叧闂佸彇鏁版嵁锛屾祴璇曟暟鎹殑瀛樺湪銆佸畾涔夊瓨鏀炬暟鎹殑鍙橀噺绛夌瓑銆

娓告爣FOR 寰幆鐨勮娉曞涓嬶細
FOR record_name IN(corsor_name[(parameter[,parameter]...)]| (query_difinition)LOOPstatementsEND LOOP;
涓嬮潰鎴戜滑鐢╢or寰幆閲嶅啓涓婇潰鐨勪緥瀛愶細

DECALRECURSOR c_dept IS SELECT deptno,dname FROM dept ORDER BY deptno;CURSOR c_emp (p_dept VARACHAR2) ISSELECT ename,salaryFROM empWHERE deptno=p_deptORDER BY enamev_tot_salary EMP.SALARY%TYPE;BEGINFOR r_dept IN c_dept LOOPDBMS_OUTPUT.PUT_LINE(Department:|| r_dept.deptno||-||r_dept.dname);v_tot_salary:=0;FOR r_emp IN c_emp(r_dept.deptno) LOOPDBMS_OUTPUT.PUT_LINE(Name:|| v_ename|| salary:||v_salary);v_tot_salary:=v_tot_salary+v_salary;END LOOP;DBMS_OUTPUT.PUT_LINE(Toltal Salary for dept:|| v_tot_salary);END LOOP;END;

鍦ㄦ父鏍嘑OR寰幆涓娇鐢ㄦ煡璇㈠湪娓告爣FOR寰幆涓彲浠ュ畾涔夋煡璇紝鐢变簬娌℃湁鏄惧紡澹版槑鎵浠ユ父鏍囨病鏈夊悕瀛楋紝璁板綍鍚嶉氳繃娓告爣鏌ヨ鏉ュ畾涔夈
DECALRE銆v_tot_salary EMP.SALARY%TYPE;BEGIN銆FOR r_dept IN (SELECT deptno,dname FROM dept ORDER BY deptno) LOOPDBMS_OUTPUT.PUT_LINE(Department:|| r_dept.deptno||-||r_dept.dname);v_tot_salary:=0;FOR r_emp IN (SELECT ename,salary銆FROM emp銆WHERE deptno=p_dept銆ORDER BY ename) LOOPDBMS_OUTPUT.PUT_LINE(Name:|| v_ename|| salary:||v_salary);v_tot_salary:=v_tot_salary+v_salary;END LOOP;DBMS_OUTPUT.PUT_LINE(Toltal Salary for dept:|| v_tot_salary);銆END LOOP;END;

娓告爣涓殑瀛愭煡璇㈣娉曞涓嬶細
CURSOR C1 IS SELECT * FROM empWHERE deptno NOT IN (SELECT deptnoFROM deptWHERE dname!=ACCOUNTING);

鍙互鐪嬪嚭涓嶴QL涓殑瀛愭煡璇㈡病鏈変粈涔堝尯鍒傛父鏍囦腑鐨勬洿鏂板拰鍒犻櫎鍦≒L/SQL涓緷鐒跺彲浠ヤ娇鐢║PDATE鍜孌ELETE璇彞鏇存柊鎴栧垹闄ゆ暟鎹銆傛樉寮忔父鏍囧彧鏈夊湪闇瑕佽幏寰楀琛屾暟鎹殑鎯呭喌涓嬩娇鐢ㄣ侾L/SQL鎻愪緵浜嗕粎浠呬娇鐢ㄦ父鏍囧氨鍙互鎵ц鍒犻櫎鎴栨洿鏂拌褰曠殑鏂规硶銆

UPDATE鎴朌ELETE璇彞涓殑WHERE CURRENT OF瀛愪覆涓撻棬澶勭悊瑕佹墽琛孶PDATE鎴朌ELETE鎿嶄綔鐨勮〃涓彇鍑虹殑鏈杩戠殑鏁版嵁銆傝浣跨敤杩欎釜鏂规硶锛屽湪澹版槑娓告爣鏃跺繀椤讳娇鐢‵OR UPDATE瀛愪覆锛屽綋瀵硅瘽浣跨敤FOR UPDATE瀛愪覆鎵撳紑涓涓父鏍囨椂锛屾墍鏈夎繑鍥為泦涓殑鏁版嵁琛岄兘灏嗗浜庤绾э紙ROW-LEVEL)鐙崰寮忛攣瀹氾紝鍏朵粬瀵硅薄鍙兘鏌ヨ杩欎簺鏁版嵁琛岋紝涓嶈兘杩涜UPDATE銆丏ELETE鎴朣ELECT...FOR UPDATE鎿嶄綔銆傝娉曪細FOR UPDATE [OF [schema.]table.column[,[schema.]table.column]..[nowait]鍦ㄥ琛ㄦ煡璇腑锛屼娇鐢∣F瀛愬彞鏉ラ攣瀹氱壒瀹氱殑琛,濡傛灉蹇界暐浜哋F瀛愬彞锛岄偅涔堟墍鏈夎〃涓夋嫨鐨勬暟鎹閮藉皢琚攣瀹氥

濡傛灉杩欎簺鏁版嵁琛屽凡缁忚鍏朵粬浼氳瘽閿佸畾锛岄偅涔堟甯告儏鍐典笅ORACLE灏嗙瓑寰咃紝鐩村埌鏁版嵁琛岃В閿併傚湪UPDATE鍜孌ELETE涓娇鐢╓HERE CURRENT OF瀛愪覆鐨勮娉曞涓嬶細

WHERE{CURRENT OF cursor_name|search_condition}

渚嬶細DELCARECURSOR c1 IS SELECT empno,salaryFROM empWHERE comm IS NULLFOR UPDATE OF comm;v_comm NUMBER(10,2);BEGINFOR r1 IN c1 LOOPIF r1.salary<500 THENv_comm:=r1.salary*0.25;ELSEIF r1.salary<1000 THENv_comm:=r1.salary*0.20;ELSEIF r1.salary<3000 THENv_comm:=r1.salary*0.15;ELSEv_comm:=r1.salary*0.12;END IF;UPDATE emp;SET comm=v_commWHERE CURRENT OF c1l;END LOOP;END      
TAG: Oracle ORACLE 澶у叏 鏁版嵁搴 娓告爣
鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

鍙戣〃璇勮
鏌ョ湅鍏ㄩ儴鍥炲銆愬凡鏈0浣嶇綉鍙嬪彂琛ㄤ簡鐪嬫硶銆