2011-05-19 103 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