次のクエリが Oracle 10 では失敗し、Oracle 11 では失敗しない理由。
SELECT trunc(DBMS_RANDOM.value(low => 10, high =>50)) from dual;
オラクル 10:
ORA-00907: missing right parenthesis
この答えは少し憶測ですが、右括弧が見つからないというエラーの考えられる説明の 1 つは、このエラーは実際には括弧が見つからないということではありません。DBMS_RANDOM.value
代わりに、 Oracle 10 と Oracle 11 のバージョンでAPI が異なる場合、このエラーが表示される可能性があります。代わりに次のクエリを試してください。
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 はすでに作品を示しています。「右括弧がありません」というエラーは、必ずしも括弧のバランスが取れていないことを意味するわけではありません。パーサーが、括弧が入る可能性があると考えていた場所 (この場合は=>
.