2017-06-03 56 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中發生副作用引入了許多問題。例如,使用索引的查詢結果與不使用索引的結果不同。

我的猜測是,原因是因爲這兩個值可能會在查詢運行時發生變化,並且在某些情況下,查詢的結果不是確定性的。