2010-08-11 53 views

回答

35

START WITH子句接受一個整數。您可以動態地創建「Create sequence」語句,然後使用execute immediate執行以實現此目的。

declare 
    l_new_seq INTEGER; 
begin 
    select max(id) + 1 
    into l_new_seq 
    from test_table; 

    execute immediate 'Create sequence test_seq_2 
         start with ' || l_new_seq || 
         ' increment by 1'; 
end; 
/

查看這些鏈接。

http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_6014.htm
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm

+2

我有一個小問題,當該表是新的,因爲 「MAX(ID)」 返回null。所以我不得不改變選擇:「select nvl(max(id),0)+ 1」 也許有人遇到同樣的問題 – steven2308 2016-01-28 14:50:16

-1

這裏我有我的例子非常有效:

declare 
ex number; 
begin 
    select MAX(MAX_FK_ID) + 1 into ex from TABLE; 
    If ex > 0 then 
    begin 
      execute immediate 'DROP SEQUENCE SQ_NAME'; 
     exception when others then 
     null; 
    end; 
    execute immediate 'CREATE SEQUENCE SQ_NAME INCREMENT BY 1 START WITH ' || ex || ' NOCYCLE CACHE 20 NOORDER'; 
    end if; 
end; 
相關問題