我创建了sequnce prac_seq:
CREATE SEQUENCE prac_seq
START WITH 300
INCREMENT BY 10;
我想使用以下内容:
UPDATE pracownicy
SET placa_dod = prac_seq.CURRVAL
WHERE id_prac = prac_seq.CURRVAL;
然后我收到一个错误:
错误报告 - SQL错误:ORA-02287:此处不允许序列号 02287. 00000 - “此处不允许序列号” *原因:指定的序列号(CURRVAL或NEXTVAL)不合适 在声明中。 *动作:删除序列号。
为什么我不能使用上面的序列?
答案 0 :(得分:1)
首先,文档在这一点上非常明确:
序列值的限制
您不能在以下构造中使用CURRVAL和NEXTVAL:
- SELECT语句的WHERE子句
我明白为什么NEXTVAL
无法使用。您认为WHERE
子句正在执行一次,但是(概念上)执行每一行。在WHERE
中进行副作用操作会带来许多问题。例如,使用索引的查询结果与不使用索引的结果不同。
我的猜测是因为两个值都可能在查询运行时发生变化,在某些情况下,查询结果不确定。