oracle中的序列创建

oracle中的序列创建,oracle,oracle10g,Oracle,Oracle10g,我想在oracle中创建一个序列,其中列字段(Empid)的最大值必须是序列的最小值 下面是我在同一个stackexchange中找到的 create sequence mytemp_seq start with &v_Startval; 此命令提示我输入必须输入的列名称的最大值 我如何在没有提示的情况下修正&v_startval的值,但直接从下面的语句中设置值 select max(empid) from mytemp.. 我试着像下面这样 create sequence myte

我想在oracle中创建一个序列,其中列字段(Empid)的最大值必须是序列的最小值

下面是我在同一个stackexchange中找到的

create sequence mytemp_seq start with &v_Startval;
此命令提示我输入必须输入的列名称的最大值

我如何在没有提示的情况下修正&v_startval的值,但直接从下面的语句中设置值

select max(empid) from mytemp..
我试着像下面这样

create sequence mytemp_seq start with (SELECT MAX(empid) from mytemp)

但是它不起作用。

您可以使用一些PL/SQL来实现:

declare
  v_startval integer;
begin
  select max(empid)+1 into v_startval from mytemp;
  execute immediate 'create sequence mytemp_seq start with ' || v_startval;
end;
在sqlplus中,您可以

col max_id new_value seq_min_val  
SELECT MAX(empid)+1 AS max_id from mytemp;
create sequence mytemp_seq start with &seq_min_val;
下面的两个答案(托尼·安德鲁斯和舒里克)在不同的情况下都是好的。如果这是部署脚本的一部分,我将使用schurik的答案,因为它将生成更具描述性的spool文件。如果你打算把这作为一项常规活动来做,我会将Tony的答案嵌入到一个包中(并质疑设计;动态创建序列通常是设计决策失误的结果)。