试图在 Oracle 中创建一个以特定表的主键的最大值开始的序列。为什么这不起作用?

Ram*_*kla 0 oracle

尝试在 Oracle 中创建一个序列,该序列以特定表中的最大值开始。为什么这不起作用?

CREATE SEQUENCE reservation_sequence
MINVALUE 0
START WITH (SELECT MAX(reservation_id)
 FROM reservation) 
INCREMENT BY 1
CACHE 20;
Run Code Online (Sandbox Code Playgroud)

Phi*_*lᵀᴹ 8

您不能以这种方式将 DDL 与 DML 混合使用。

最好的选择是匿名 PL/SQL 块:

BEGIN
DECLARE
seqval NUMBER;
  BEGIN
  SELECT MAX(nvl(reservation_id),0)
  INTO seqval
  FROM reservation;

  execute immediate('CREATE SEQUENCE reservation_sequence MINVALUE 0 START WITH '||seqval||' INCREMENT BY 1 CACHE 20');
  END;
END;
/
Run Code Online (Sandbox Code Playgroud)

另外,你确定你想要max()而不是max()+1吗?