2017-06-03 65 views
-2

を許可されていない私はsequnceのprac_seq作成しました:ORACLEの12C - ORA-02287:順序番号がここに

CREATE SEQUENCE prac_seq 
    START WITH 300 
    INCREMENT BY 10; 

をそして私は次のようにそれを使用したい:

UPDATE pracownicy 
    SET placa_dod = prac_seq.CURRVAL 
    WHERE id_prac = prac_seq.CURRVAL; 

をそして、私はエラーを取得します

Error report - SQL Error: ORA-02287: sequence number not allowed here 02287. 00000 - "sequence number not allowed here" *Cause: The specified sequence number (CURRVAL or NEXTVAL) is inappropriate here in the statement. *Action: Remove the sequence number.

なぜ私は上記のようなシーケンスを使用できませんか?

+1

なぜあなたはしたいですか? –

+0

'where'節でシーケンスを参照することは許可されていません。 –

+0

[ORA-02287:シーケンス番号は許可されていません]の重複している可能性があります(https://stackoverflow.com/questions/41155090/ora-02287-sequence-number-not-allowed-here) –

答えて

1

まず、ドキュメントは、この点では非常に明確である:

Restrictions on Sequence Values

You cannot use CURRVAL and NEXTVAL in the following constructs:

  • The WHERE clause of a SELECT statement

NEXTVALを使用することができない理由を私は理解してください。 WHERE句は一度実行されていると思いますが、概念的には各行に対して実行されます。 WHEREで副作用操作を行うと、さまざまな問題が発生します。たとえば、索引を使用する問合せの結果は、索引を使用しない結果とは異なります。

私の推測によると、その理由は、クエリの実行中に両方の値が変更され、場合によってはクエリの結果が確定的でないためです。

関連する問題