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

Oracle11g ORA-00907:缺少右括号,在Oracle 10上,而不是在Oracle 11上,oracle11g,oracle10g,ora-00907,Oracle11g,Oracle10g,Ora 00907,为什么以下查询在Oracle 10上失败,而不是在Oracle 11上失败 SELECT trunc(DBMS_RANDOM.value(low => 10, high =>50)) from dual; 甲骨文10: ORA-00907: missing right parenthesis 这个答案有点推测性,但缺少右括号错误的一个可能解释是,这个错误实际上并不是关于缺少括号。相反,如果在您的Oracle 10和Oracle 11版本中,DBMS_RANDOM.value的A

为什么以下查询在Oracle 10上失败,而不是在Oracle 11上失败

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

ORA-00907: missing right parenthesis 

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

SELECT TRUNC(DBMS_RANDOM.value(10, 50))
FROM dual
如果这样做有效,那么您将知道API在Oracle 10和Oracle 11之间发生了变化

这是一个使用API的查询。

这是一个:

从本版本开始,现在可以调用该函数 在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已经展示的作品一样。“缺少右括号”错误并不一定意味着括号不平衡;只是解析器在它认为括号可能出现的地方看到了它没有预料到的东西——在本例中,在
=>