ORACLE 12C - ORA-02287:此处不允许使用序列号

时间:2017-06-03 15:18:58

标签: sql oracle oracle12c

我创建了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)不合适              在声明中。   *动作:删除序列号。

为什么我不能使用上面的序列?

1 个答案:

答案 0 :(得分:1)

首先,文档在这一点上非常明确:

  

序列值的限制

     

您不能在以下构造中使用CURRVAL和NEXTVAL:

     
      
  • SELECT语句的WHERE子句
  •   

我明白为什么NEXTVAL无法使用。您认为WHERE子句正在执行一次,但是(概念上)执行每一行。在WHERE中进行副作用操作会带来许多问题。例如,使用索引的查询结果与不使用索引的结果不同。

我的猜测是因为两个值都可能在查询运行时发生变化,在某些情况下,查询结果不确定。