2

次のクエリが Oracle 10 では失敗し、Oracle 11 では失敗しない理由。

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

オラクル 10:

ORA-00907: missing right parenthesis 
4

2 に答える 2

2

この答えは少し憶測ですが、右括弧が見つからないというエラーの考えられる説明の 1 つは、このエラーは実際には括弧が見つからないということではありません。DBMS_RANDOM.value代わりに、 Oracle 10 と Oracle 11 のバージョンでAPI が異なる場合、このエラーが表示される可能性があります。代わりに次のクエリを試してください。

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

これが機能する場合、API が Oracle 10 と 11 の間で変更されたことがわかります。

これは、クエリにある API を使用するリファレンスです。

于 2016-08-31T13:14:07.927 に答える
1

これは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 はすでに作品を示しています。「右括弧がありません」というエラーは、必ずしも括弧のバランスが取れていないことを意味するわけではありません。パーサーが、括弧が入る可能性があると考えていた場所 (この場合は=>.

于 2017-01-06T17:31:53.430 に答える