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

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

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

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

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

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

浠庢父鏍囨彁鍙栨暟鎹

浠庢父鏍囧緱鍒颁竴琛屾暟鎹娇鐢‵ETCH鍛戒护銆傛瘡涓娆℃彁鍙栨暟鎹悗锛屾父鏍囬兘鎸囧悜缁撴灉闆嗙殑涓嬩竴琛屻傝娉曞涓嬶細

FETCH cursor_name INTO variable[,variable,...]



瀵逛簬SELECT瀹氫箟鐨勬父鏍囩殑姣忎竴鍒楋紝FETCH鍙橀噺鍒楄〃閮藉簲璇ユ湁涓涓彉閲忎笌涔嬬浉瀵瑰簲锛屽彉閲忕殑绫诲瀷涔熻鐩稿悓銆

渚嬶細

SET SERVERIUTPUT ON

DECLARE

v_ename EMP.ENAME%TYPE;

v_salary EMP.SALARY%TYPE;

CURSOR c_emp IS SELECT ename,salary FROM emp;

BEGIN

OPEN c_emp;

FETCH c_emp INTO v_ename,v_salary;

DBMS_OUTPUT.PUT_LINE(Salary of Employee|| v_ename

||is|| v_salary);

FETCH c_emp INTO v_ename,v_salary;

DBMS_OUTPUT.PUT_LINE(Salary of Employee|| v_ename

||is|| v_salary);

FETCH c_emp INTO v_ename,v_salary;

DBMS_OUTPUT.PUT_LINE(Salary of Employee|| v_ename

||is|| v_salary);

CLOSE c_emp;

END



杩欐浠g爜鏃犵枒鏄潪甯搁夯鐑︾殑锛屽鏋滄湁澶氳杩斿洖缁撴灉锛屽彲浠ヤ娇鐢ㄥ惊鐜苟鐢ㄦ父鏍囧睘鎬т负缁撴潫寰幆鐨勬潯浠讹紝浠ヨ繖绉嶆柟寮忔彁鍙栨暟鎹紝绋嬪簭鐨勫彲璇绘у拰绠娲佹ч兘澶т负鎻愰珮锛屼笅闈㈡垜浠娇鐢ㄥ惊鐜噸鏂板啓涓婇潰鐨勭▼搴忥細

SET SERVERIUTPUT ON

DECLARE

v_ename EMP.ENAME%TYPE;

v_salary EMP.SALARY%TYPE;

CURSOR c_emp IS SELECT ename,salary FROM emp;

BEGIN

OPEN c_emp;

LOOP

FETCH c_emp INTO v_ename,v_salary;

EXIT WHEN c_emp%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(Salary of Employee|| v_ename

||is|| v_salary);

END



璁板綍鍙橀噺

瀹氫箟涓涓褰曞彉閲忎娇鐢═YPE鍛戒护鍜%ROWTYPE锛屽叧浜%ROWsTYPE鐨勬洿澶氫俊鎭鍙傞槄鐩稿叧璧勬枡銆

璁板綍鍙橀噺鐢ㄤ簬浠庢父鏍囦腑鎻愬彇鏁版嵁琛岋紝褰撴父鏍囬夋嫨寰堝鍒楃殑鏃跺欙紝閭d箞浣跨敤璁板綍姣斾负姣忓垪澹版槑涓涓彉閲忚鏂逛究寰楀銆

褰撳湪琛ㄤ笂浣跨敤%ROWTYPE骞跺皢浠庢父鏍囦腑鍙栧嚭鐨勫兼斁鍏ヨ褰曚腑鏃讹紝濡傛灉瑕侀夋嫨琛ㄤ腑鎵鏈夊垪锛岄偅涔堝湪SELECT瀛愬彞涓娇鐢*姣斿皢鎵鏈夊垪鍚嶅垪鍑烘潵瑕佸畨鍏ㄥ緱澶氥

渚嬶細

SET SERVERIUTPUT ON

DECLARE

R_emp EMP%ROWTYPE;

CURSOR c_emp IS SELECT * FROM emp;

BEGIN

OPEN c_emp;

LOOP

FETCH c_emp INTO r_emp;

EXIT WHEN c_emp%NOTFOUND;

DBMS_OUT.PUT.PUT_LINE(Salary of Employee||r_emp.ename||is|| r_emp.salary);

END LOOP;

CLOSE c_emp;

END;



%ROWTYPE涔熷彲浠ョ敤娓告爣鍚嶆潵瀹氫箟锛岃繖鏍风殑璇濆氨蹇呴』瑕侀鍏堝0鏄庢父鏍囷細

SET SERVERIUTPUT ON

DECLARE

CURSOR c_emp IS SELECT ename,salary FROM emp;

R_emp c_emp%ROWTYPE;

BEGIN

OPEN c_emp;

LOOP

FETCH c_emp INTO r_emp;

EXIT WHEN c_emp%NOTFOUND;

DBMS_OUT.PUT.PUT_LINE(Salary of Employee||r_emp.ename||is|| r_emp.salary);

END LOOP;

CLOSE c_emp;

END;



甯﹀弬鏁扮殑娓告爣

涓庡瓨鍌ㄨ繃绋嬪拰鍑芥暟鐩镐技锛屽彲浠ュ皢鍙傛暟浼犻掔粰娓告爣骞跺湪鏌ヨ涓娇鐢ㄣ傝繖瀵逛簬澶勭悊鍦ㄦ煇绉嶆潯浠朵笅鎵撳紑娓告爣鐨勬儏鍐甸潪甯告湁鐢ㄣ傚畠鐨勮娉曞涓嬶細

CURSOR cursor_name[(parameter[,parameter],...)] IS select_statement;



瀹氫箟鍙傛暟鐨勮娉曞涓嬶細

Parameter_name [IN] data_type[{:=|DEFAULT} value]



涓庡瓨鍌ㄨ繃绋嬩笉鍚岀殑鏄紝娓告爣鍙兘鎺ュ彈浼犻掔殑鍊硷紝鑰屼笉鑳借繑鍥炲笺傚弬鏁板彧瀹氫箟鏁版嵁绫诲瀷锛屾病鏈夊ぇ灏忋

鍙﹀鍙互缁欏弬鏁拌瀹氫竴涓己鐪佸硷紝褰撴病鏈夊弬鏁板间紶閫掔粰娓告爣鏃讹紝灏变娇鐢ㄧ己鐪佸笺傛父鏍囦腑瀹氫箟鐨勫弬鏁板彧鏄竴涓崰浣嶇锛屽湪鍒寮曠敤璇ュ弬鏁颁笉涓瀹氬彲闈犮

鍦ㄦ墦寮娓告爣鏃剁粰鍙傛暟璧嬪硷紝璇硶濡備笅锛

OPEN cursor_name[value[,value]....];



鍙傛暟鍊煎彲浠ユ槸鏂囧瓧鎴栧彉閲忋

渚嬶細

DECALRE

CURSOR c_dept IS SELECT * FROM dept ORDER BY deptno;

CURSOR c_emp (p_dept VARACHAR2) IS

SELECT ename,salary

FROM emp

WHERE deptno=p_dept

ORDER BY ename

r_dept DEPT%ROWTYPE;

v_ename EMP.ENAME%TYPE;

v_salary EMP.SALARY%TYPE;

v_tot_salary EMP.SALARY%TYPE;

BEGIN

OPEN c_dept;

LOOP

FETCH c_dept INTO r_dept;

EXIT WHEN c_dept%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(Department:|| r_dept.deptno||-||r_dept.dname);

v_tot_salary:=0;

OPEN c_emp(r_dept.deptno);

LOOP

FETCH c_emp INTO v_ename,v_salary;

EXIT WHEN c_emp%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(Name:|| v_ename|| salary:||v_salary);

v_tot_salary:=v_tot_salary+v_salary;

END LOOP;

CLOSE c_emp;

DBMS_OUTPUT.PUT_LINE(Toltal Salary for dept:|| v_tot_salary);

END LOOP;

CLOSE c_dept;

END;
    

 

 
TAG: Oracle ORACLE 澶у叏 鏁版嵁搴 娓告爣
鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

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