2011-05-19 68 views
5

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

是一个我在我们同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) 

但它不直接设置值工作。

+0

两个答案(托尼·安德鲁斯和schurik)以下是在不同情况下良好。如果这是部署脚本的一部分,我会使用schurik的答案,因为它会产生更具描述性的假脱机文件。如果你打算把这个做成一个常规活动,我会把Tony的答案嵌入到一个包中(并且质疑设计;动态创建序列通常是由于糟糕的设计决定造成的)。 – Allan 2011-05-19 13:50:55

回答

7

你可以用一些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; 
+0

Thanks.That工作。 – user682571 2011-05-19 10:43:53

5

在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; 
+1

+1我更喜欢这个解决方案,我的! – 2011-05-19 10:54:27