当前位置:  开发笔记 > 编程语言 > 正文

Oracle 9i:据说缺少右括号

如何解决《Oracle9i:据说缺少右括号》经验,为你挑选了1个好方法。

我有一个用Oracle 9i(版本9.2.0.4.0)编写的简单函数来模拟内联IF.对于那些感兴趣的人,这里是代码:

create or replace
FUNCTION IIF  
   (testExpression NUMBER,
    trueResult NUMBER,
    falseResult NUMBER)
RETURN NUMBER   
AS
BEGIN
   /*
      A simple in-line IF function for use with SQL queries. If the test
      expression evaluates to any non-zero value, it is considered to be 
      true, and the trueResult is returned. Otherwise, falseResult is
      returned.
   */   
   IF (testExpression is null) or (testExpression = 0) THEN
      return falseResult;
   ELSE
      return trueResult;
   END IF;
END IIF;

这不是火箭科学.现在,这是一个很大的谜团:如果我执行以下SQL语句,一切都很好,并且完全符合我的预期:

SELECT IIF(1, 'true', 'false') FROM DUAL;
SELECT IIF(0, 'false', 'true') FROM DUAL;

但是,以下内容会从Oracle产生一个非常奇怪的错误:

SELECT IIF((0 = 1), 'false', 'true') FROM DUAL;

该错误如下:

ORA-00907: missing right parenthesis.

显然,情况并非如此.有没有人碰巧对这一点奇怪的解释?

目前正在进行大量的自我控制,以防止自己将Oracle服务器抛到窗外.甲骨文似乎充斥着这些疯狂.

编辑:我有必要使用某种神奇的语法在select语句中使用相等运算符吗?



1> Jon Ericson..:

也许你可以解释一下你想要做什么.我认为你正在寻找CASEDECODE功能,但我不能确定.由于某种原因,您似乎正在反对SQL语言.

发生此错误是因为Oracle不期望select查询子句中存在关系运算符:

SQL> SELECT IIF(1>7, 0, 1) FROM DUAL;
SELECT IIF(1>7, 0, 1) FROM DUAL
            *
ERROR at line 1:
ORA-00907: missing right parenthesis

SQL> SELECT 1=0 FROM DUAL;
SELECT 1=0 FROM DUAL
        *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected

请参阅此问问汤姆文章.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有