ORA-00907:缺少右括号,在Oracle 10上而不是在Oracle 11上



为什么下面的查询在Oracle 10上失败而在Oracle 11上不成功

SELECT trunc(DBMS_RANDOM.value(low => 10, high =>50)) from dual;
Oracle 10:

ORA-00907: missing right parenthesis 

这个答案有点推测性,但是对于缺少右括号错误的一个可能的解释是,这个错误并不是关于缺少括号的。相反,如果DBMS_RANDOM.value的API在Oracle 10和Oracle 11版本中不同,那么您可能会看到此错误。试试这个查询:

SELECT TRUNC(DBMS_RANDOM.value(10, 50))
FROM dual

如果这个工作,那么你将知道API在Oracle 10和11之间发生了变化。

这里是一个引用,使用API,因为我在我的查询。

这是11gR1中的新功能:

从这个版本开始,现在可以调用这个函数在SQL语句中。例如,命名表示法语法为:

SELECT f(pn=>3, p2=>2, p1=>1) FROM dual

或者,混合符号是:

SELECT f(1, pn=>3) FROM dual

在以前的版本中,尝试命名或混合表示法会导致一个错误。

所以在11g之前,你只能使用位置符号从SQL调用PL/SQL函数,例如

SELECT trunc(DBMS_RANDOM.value(10, 50)) from dual;

…就像@TimBiegeleisen已经展示的作品一样。"缺少右括号"错误并不一定意味着你的括号是不平衡的;只是解析器看到了一些出乎意料的东西,它认为括号可能在哪里——在这个例子中,在=>

相关内容

  • 没有找到相关文章

最新更新