你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
跨越Oracle和MSSQL关系数据库开发——01开关语句(4)
 
语法二表达:
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;
  可以看出,语法一的表达能力要强于语法二,因为语法二是单值比较,而语法一是表达式计算。通常,凡是语法二能表达的,语法一均能表达,反之则不然。例如,语法一可以方便的判断大于或者小于等关系,语法二则只能判断等于。
 
  注意,Oracle并没有提供在SQL语句中使用的CASE函数。
2.1.3 DECODE来计算复杂逻辑
  前面讲到,CASE语句的语法二的表达能力有限。由于DECODE的功能相当于CASE语句的语法二,因此DECODE的表达能力也是有限的。对于9i之前版本的用户,有时面临着表达能力不够的问题。特别是从MSSQL迁移时,由于MSSQL提供了CASE语句,造成表达能力的不一致。
  这里为读者提供一种技巧,使用DECODE来表达复杂的关于,例如大于逻辑。
  假定有一张证券交易表fsjour,其中的列stock_code表示证券代码,我们使用DECODE来计算出stock_code所属的股票种类。
  其规则为:当stock_code在600000和699999之间为“沪A”,在000000和099999之间为“深A”,否则为“其他”。
select DECODE(1, (select 1 from dual
                   where stock_code between '600000' and '699999'), '沪A',
                 (select 1 from dual
                   where stock_code between '000000' and '099999'), '深A',
                 '其他')
 from fsjour;
  这里的技巧是将复杂的条件转移到子语句的WHERE部分。
  如果两个子语句的结果相同,那么前面一个的结果将被返回。
  运用这种技巧,可以用DECODE实现CASE语句语法一的功能,但是语句会显得相当复杂。
(编辑:aniston)
  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089