为什么以下查询在 Oracle 10 上失败而不是在 Oracle 11 上。
SELECT trunc(DBMS_RANDOM.value(low => 10, high =>50)) from dual;
甲骨文 10:
ORA-00907: missing right parenthesis
这个答案有点投机,但是对缺少右括号错误的一种可能解释是,这个错误实际上与缺少括号有关。相反,如果DBMS_RANDOM.value
您的 Oracle 10 与 Oracle 11 版本中的 API 不同,那么您可能会看到此错误。试试这个查询:
SELECT TRUNC(DBMS_RANDOM.value(10, 50))
FROM dual
如果这有效,那么您将知道 API 在 Oracle 10 和 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 已经展示了作品。“缺少右括号”错误并不一定意味着您的括号不平衡;只是解析器看到了一些它没想到的东西,它认为括号可能会去哪里——在这种情况下,在=>
.