遇到一个Oracle字符串不等于号的问题

By | 2014年7月1日

我的问题是这样的:

ERR_TEXT := '';
……
ERR_TEXT := '有错误'
……
IF ERR_TEXT <> '' THEN
  UPDATE table T SET T.ERR_TEXT = ERR_TEXT  WHERE T.id = id;
END IF;

上面的SQL代码中,ERR_TEXT已经赋值为’有错误’了,但使用ERR_TEXT <> ”却不起作用,看来不等于号<>将空字符串当做null来处理了,导致这个判断永远为false,我的代码没法执行。

这是相当奇怪的一个问题,我搜索了一下,发现有类似的例子:Oracle中的不等于号

解决方法

IF NVL(ERR_TEXT,'xx')<>'xx' THEN
  UPDATE table T SET T.ERR_TEXT = ERR_TEXT  WHERE T.id = id;
END IF;

或者

IF CONCAT(ERR_TEXT,'XX')<>'XX' THEN
  UPDATE table T SET T.ERR_TEXT = ERR_TEXT  WHERE T.id = id;
END IF;

发表评论

电子邮件地址不会被公开。 必填项已用*标注