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

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

3
发表于 2009-1-5 19:48 | 只看该作者
璺ㄨ秺Oracle鍜孧SSQL鍏崇郴鏁版嵁搴撳紑鍙戔曗01寮鍏宠鍙 - 缂栫▼搴 - Powered by SupeSite

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

璺ㄨ秺Oracle鍜孧SSQL鍏崇郴鏁版嵁搴撳紑鍙戔曗01寮鍏宠鍙

鍙戝竷: 2008-6-30 22:35 |  浣滆: admin |   鏌ョ湅: 24娆

璺ㄨ秺Oracle鍜孧SSQL鍏崇郴鏁版嵁搴撳紑鍙戔曗01寮鍏宠鍙

銆愬瓧浣擄細灏 澶с

璺ㄨ秺Oracle鍜孧SSQL鍏崇郴鏁版嵁搴撳紑鍙戔曗01寮鍏宠鍙

浣滆咃細- 鏂囩珷鏉ユ簮锛- 鐐瑰嚮鏁帮細643 鏇存柊鏃堕棿锛2007-8-10

1. 姒傝堪

浣滀负鏈郴鍒楃殑绗竴绡囨枃绔狅紝鎴戞兂浠庝竴涓畝鍗曠殑涓撻寮濮嬨傛妧鏈殑鏂囩珷閫氬父閮芥瘮杈冩灟鐕ヤ箯鍛筹紝鎴戝敖閲忓啓鐨勯氫織鏄撴噦锛屽苟浣跨敤涓浜涙湁瓒g殑渚嬪瓙銆

绫讳技浜庨珮绾ц瑷锛孫racle鍜孧SSQL閮芥彁渚涗簡寮鍏宠鍙ユ潵澶勭悊澶氬垎鏋濋昏緫銆傛湰鏂囧皢璁茶堪涓ょ鏁版嵁搴撳紑鍏宠鍙ョ殑鐩稿悓鍜屼笉鍚屼箣澶勶紝骞朵粙缁嶄竴浜涗娇鐢ㄧ粡楠屻

2. 浣跨敤鏉′欢璇彞琛ㄨ揪澶氶噸閫夋嫨

2.1 PL/SQL鐨勬潯浠惰鍙

銆銆鍦≒L/SQL涓紝鍙互浣跨敤IF鈥HEN鈥LSIF鈥ND IF鏉ヨ〃绀哄閲嶉夋嫨銆

銆銆浠ヤ笅鏄祴璇曚緥瀛愶細

IF v_grade = 'A' THEN

v_result := 'Excellent';

ELSIF v_grade = 'B' THEN

v_result := 'Very Good';

ELSIF v_grade = 'C' THEN

v_result := 'Good';

ELSIF v_grade = 'D' THEN

v_result := 'Fair';

ELSIF v_grade = 'F' THEN

v_result := 'Poor';

ELSE

v_result := 'No such grade';

END IF;

銆銆涓婇潰鐨勪唬鐮佹寜鐓у彉閲弙_grade鐨勫艰绠楀嚭涓嶅悓鐨勭瓑绾с侾L/SQL鐨凟LSIF鏄笓闂ㄨ璁℃垚鏀寔澶氶噸閫夋嫨鐨勶紝閬垮厤澶氬眰閫夋嫨銆

2.2 T-SQL鐨勬潯浠惰鍙

銆銆T-SQL鎻愪緵浜嗙被浼间簬C璇█鐨勫灞傛潯浠惰鍙ャ備笂涓灏忚妭鐨勪緥瀛愬彲浠ヨ〃杈句负锛

IF @grade = 'A'

BEGIN

@result := 'Excellent';

END

ELSE IF @grade = 'B'

BEGIN

@result := 'Very Good';

END

ELSE IF @grade = 'C'

BEGIN

@result := 'Good'

END

ELSE IF @grade = 'D'

BEGIN

@result := 'Fair'

END

ELSE IF @grade = 'F'

BEGIN

@result := 'Poor'

END

ELSE

BEGIN

@result := 'No such grade'

END

銆銆涓婅堪璇彞铏界劧鐪嬭捣鏉ュ拰PL/SQL鐨凟LSIF宸笉澶氾紝浣嗗疄闄呬笂鏄娇鐢ㄥ灞傞夋嫨銆

2. 浣跨敤寮鍏宠鍙ヨ〃杈惧閲嶉夋嫨

銆銆寮鍏宠鍙ュ氨鏄笓闂ㄤ负绠鍖栧閲嶉夋嫨鑰岃璁$殑锛屾墍浠ワ紝濡傛灉鍙兘锛屽敖閲忎娇鐢ㄤ箣銆

2.1 Oracle鐨勫紑鍏宠鍙

2.1.1 DECODE鍑芥暟

銆銆鍦9i浠ュ墠鐨勭増鏈腑锛孫racle鍙彁渚涗簡DECODE涓涓紑鍏冲嚱鏁帮紝骞朵笖璇ュ嚱鏁板彧鑳藉湪SQL璇彞涓娇鐢紝涓嶈兘鐩存帴鍦≒L/SQL鐨勫叾浠栫被鍨嬭鍙ヤ腑浣跨敤銆

銆銆DECODE鐨勮娉曚负锛

DECODE(expr,search,result[,search,result]...[,default])

銆銆渚嬪锛屼笂涓灏忚妭涓殑渚嬪瓙鍙互鐢―ECODE琛ㄨ揪涓猴細

select DECODE(v_grade, 'A', 'Excellent',

'B', 'Very Good',

'C', 'Good',

'D', 'Fair',

'F', 'Poor',

'No such grade')

into v_result

from dual;

銆銆杩欓噷鍋囪v_grade鍜寁_result鍧囦负PL/SQL涓殑鍙橀噺銆

2.1.2 CASE璇彞

銆銆涓轰簡绠鍖朠L/SQL鐨勬帶鍒舵祦绋嬶紝浠9i寮鍙戯紝PL/SQL鎻愪緵浜嗙被浼间簬C璇█SWITCH璇彞鐨凜ASE璇彞銆

銆銆浠庤〃鐜板舰寮忔潵鐪嬶紝CASE璇彞鏈変袱绉嶈娉曘

銆銆璇硶涓锛

searched_case_statement ::=

[ <> ]

CASE { WHEN boolean_expression THEN {statement;} ... }...

[ ELSE {statement;}... ]

END CASE [ label_name ];

銆銆璇硶浜岋細

simple_case_statement ::=

[ <> ]

CASE case_operand

{ WHEN when_operand THEN {statement;} ... }...

[ ELSE {statement;}... ]

END CASE [ label_name ];

銆銆杩欓噷鐨刲abel_name鏄綔涓烘爣绛句娇鐢ㄧ殑锛屽彲蹇界暐銆

銆銆DECODE鐨勫姛鑳界浉褰撲簬绗簩绉嶈娉曠殑鍔熻兘銆

銆銆鎴戜滑鐢ㄤ袱绉嶄笉鍚岀殑璇硶鍒嗗埆鏉ヨ〃杈惧墠闈㈢殑渚嬪瓙銆

銆銆璇硶涓琛ㄨ揪锛

CASE

WHEN v_grade = 'A' THEN

v_result := 'Excellent';

WHEN v_grade = 'B' THEN

v_result := 'Very Good';

WHEN v_grade = 'C' THEN

v_result := 'Good';

WHEN v_grade = 'D' THEN

v_result := 'Fair';

WHEN v_grade = 'F' THEN

v_result := 'Poor';

ELSE

v_result := 'No such grade';

END CASE;

銆銆璇硶浜岃〃杈撅細

CASE v_grade

WHEN 'A' THEN

v_result := 'Excellent';

WHEN 'B' THEN

v_result := 'Very Good';

WHEN 'C' THEN

v_result := 'Good';

WHEN 'D' THEN

v_result := 'Fair';

WHEN 'F' THEN

v_result := 'Poor';

ELSE

v_result := 'No such grade';

END CASE;

銆銆鍙互鐪嬪嚭锛岃娉曚竴鐨勮〃杈捐兘鍔涜寮轰簬璇硶浜岋紝鍥犱负璇硶浜屾槸鍗曞兼瘮杈冿紝鑰岃娉曚竴鏄〃杈惧紡璁$畻銆傞氬父锛屽嚒鏄娉曚簩鑳借〃杈剧殑锛岃娉曚竴鍧囪兘琛ㄨ揪锛屽弽涔嬪垯涓嶇劧銆備緥濡傦紝璇硶涓鍙互鏂逛究鐨勫垽鏂ぇ浜庢垨鑰呭皬浜庣瓑鍏崇郴锛岃娉曚簩鍒欏彧鑳藉垽鏂瓑浜庛

銆銆娉ㄦ剰锛孫racle骞舵病鏈夋彁渚涘湪SQL璇彞涓娇鐢ㄧ殑CASE鍑芥暟銆

2.1.3 鐢―ECODE鏉ヨ绠楀鏉傞昏緫

銆銆鍓嶉潰璁插埌锛孋ASE璇彞鐨勮娉曚簩鐨勮〃杈捐兘鍔涙湁闄愩傜敱浜嶥ECODE鐨勫姛鑳界浉褰撲簬CASE璇彞鐨勮娉曚簩锛屽洜姝ECODE鐨勮〃杈捐兘鍔涗篃鏄湁闄愮殑銆傚浜9i涔嬪墠鐗堟湰鐨勭敤鎴凤紝鏈夋椂闈复鐫琛ㄨ揪鑳藉姏涓嶅鐨勯棶棰樸傜壒鍒槸浠嶮SSQL杩佺Щ鏃讹紝鐢变簬MSSQL鎻愪緵浜咰ASE璇彞锛岄犳垚琛ㄨ揪鑳藉姏鐨勪笉涓鑷淬

銆銆杩欓噷涓鸿鑰呮彁渚涗竴绉嶆妧宸э紝浣跨敤DECODE鏉ヨ〃杈惧鏉傜殑鍏充簬锛屼緥濡傚ぇ浜庨昏緫銆

銆銆鍋囧畾鏈変竴寮犺瘉鍒镐氦鏄撹〃fsjour锛屽叾涓殑鍒梥tock_code琛ㄧず璇佸埜浠g爜锛屾垜浠娇鐢―ECODE鏉ヨ绠楀嚭stock_code鎵灞炵殑鑲$エ绉嶇被銆

銆銆鍏惰鍒欎负锛氬綋stock_code鍦600000鍜699999涔嬮棿涓衡滄勃A鈥濓紝鍦000000鍜099999涔嬮棿涓衡滄繁A鈥濓紝鍚﹀垯涓衡滃叾浠栤濄

select DECODE(1, (select 1 from dual

where stock_code between '600000' and '699999'), '娌狝',

(select 1 from dual

where stock_code between '000000' and '099999'), '娣盇',

'鍏朵粬')

from fsjour;

銆銆杩欓噷鐨勬妧宸ф槸灏嗗鏉傜殑鏉′欢杞Щ鍒板瓙璇彞鐨刉HERE閮ㄥ垎銆

銆銆濡傛灉涓や釜瀛愯鍙ョ殑缁撴灉鐩稿悓锛岄偅涔堝墠闈竴涓殑缁撴灉灏嗚杩斿洖銆

銆銆杩愮敤杩欑鎶宸э紝鍙互鐢―ECODE瀹炵幇CASE璇彞璇硶涓鐨勫姛鑳斤紝浣嗘槸璇彞浼氭樉寰楃浉褰撳鏉傘

2.2 MSSQL鐨勫紑鍏宠鍙

銆銆濡傚悓PL/SQL涓鏍凤紝T-SQL鏀寔鐨凜ASE璇彞涔熸湁闆峰悓鐨勪袱绉嶆牸寮忋

銆銆璇硶涓锛

CASE input_expression

WHEN when_expression THEN result_expression

[ ...n ]

[

ELSE else_result_expression

END

銆銆璇硶浜岋細

CASE

WHEN Boolean_expression THEN result_expression

[ ...n ]

[

ELSE else_result_expression

END

銆銆涓嶱L/SQL涓嶅悓鐨勬槸锛孴-SQL鍙厑璁稿湪SQL璇彞涓娇鐢–ASE锛屽鍚孫racle鐨凞ECODE鍑芥暟閭f牱銆

銆銆渚嬪锛2.1.1鑺備腑鐨勪緥瀛愬彲浠ヨ〃杈句负锛

select CASE @grade

WHEN 'A' THEN 'Excellent'

WHEN 'B' THEN 'Very Good'

WHEN 'C' THEN 'Good'

WHEN 'D' THEN 'Fair'

WHEN 'F' THEN 'Poor'

ELSE 'No such grade'

END

鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

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