Oracle PL/SQL比较两个字段是否一样

php中文网
发布: 2016-06-07 17:26:23
原创
2104人浏览过

Oracle PL/SQL中判断两个两个字段相等或者不相等的时候,常常出现:字段值明明不相等(一个空,一个不空),但是判断不相等的时候就

oracle pl/sql中判断两个两个字段相等或者不相等的时候,常常出现:字段值明明不相等(一个空,一个不空),但是判断不相等的时候就是得不到true。

例如以下代码:

...

a1  VARCHAR2(50);

a2  VARCHAR2(50);

b1  VARCHAR2(50);

b2  VARCHAR2(50);

...

IF ( a1 a2  OR  b1b2 ) THEN

  My_Modify(a2,b2);

END IF;

...

IF ( a1 = a2  AND  b1=b2 ) THEN

  --do something not useful

  a1:=a1;

ELSE

  My_Modify(a2,b2);

END IF;

 

当a1等于a2, b1不等于b2时:

经常会出现 My_Modify(a2,b2); 不执行的情况,但不知道为什么会这样,难道是符号不稳定?

标书对比王
标书对比王

标书对比王是一款标书查重工具,支持多份投标文件两两相互比对,重复内容高亮标记,可快速定位重复内容原文所在位置,并可导出比对报告。

标书对比王 58
查看详情 标书对比王

2012-8-27回答:不是不稳定,而是没有考虑字段空值问题,详细见后面分析。

 

2012-8-27添加说明:

经过测试和分析,发现,并不是不稳定,而是字段值为NULL是,不能使用=或者比较值,应该使用IS NULL判断是否为空。

当字段a1,a2,b1,b2中有一个或多个为空时,下面两个语句都会失效:

1.    IF ( a1 a2  OR  b1b2 ) THEN

2.    IF ( a1 = a2  AND  b1=b2 ) THEN

例如,如果a1为空,a2, b1,b2不空时,语句应该这么写

1.  IF ( (a1 IS NULL AND  a2 IS NOT NULL) OR  b1b2 ) THEN

2.  IF ( (a1 IS NULL AND  a2 IS  NULL)  AND  b1=b2 ) THEN

为了解决NULL带来的“无法判断相等或不等”的问题,,我们可以使用NVL函数解决,语句如下:

1.    IF ( NVL(a1,0)  NVL(a2,0)  OR  NVL(b1,0) NVL(b2,0) ) THEN

2.    IF ( NVL(a1,0)  =  NVL(a2,0)  AND  NVL(b1,0) = NVL(b2,0) ) THEN

 

注:NVL(args, deafultValue),args为变量,deafultValue为当args为空时,设置的默认值(一般为0)。

其中:NVL(a1, 0)  和 NVL(a1, '0')  效果样,最后 a1 的值都是字符串: '0' (不是字符!).

 

来一段测试代码:

-- Created on 2012/8/27
DECLEAR
  a1  VARCHAR2(50);
  a2  VARCHAR2(50);
  b1  VARCHAR2(50);
  b2  VARCHAR2(50);
BEGIN
  a1 := 'a';
  a2 := 'a';
  b1 := 'b';
  b2 := NULL;
 
  IF ( a1 a2  OR  b1b2 ) THEN
    DBMS_OUTPUT.put_line('11111');
  END IF;
 
  IF ( NVL(a1,0) NVL(a2,0) OR NVL(b1,0) NVL(b2,0) ) THEN
    DBMS_OUTPUT.put_line('有一对值不相等 来自   ');
  END IF;
 
  IF ( NVL(a1,0) = NVL(a2,0) AND NVL(b1,0) = NVL(b2,0) ) THEN
    DBMS_OUTPUT.put_line('都相等');
  END IF;
 
  IF ( a1 = a2  AND  b1=b2 ) THEN
    DBMS_OUTPUT.put_line('22222');
  END IF;
END;

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号