• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

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

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

例如以下代码:

a1 VARCHAR2(50);

a2 VARCHAR2(50);

b1 VARCHAR本文来源gaodai$ma#com搞$$代**码)网@2(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); 不执行的情况,但不知道为什么会这样,难道是符号不稳定?

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;


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle PL/SQL比较两个字段是否一样

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址