2010-08-11 4 views

ответ

35

С спецификатора принимает целое число. Вы можете сформировать инструкцию «Создать последовательность» динамически, а затем выполнить ее, используя для немедленного выполнения.

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

У меня была небольшая проблема, когда таблица является новым, так как «Макс (идентификатор)» возвращает нуль. Поэтому мне пришлось изменить выбор: «выбрать nvl (max (id), 0) + 1« Возможно, кто-то другой сталкивается с той же проблемой – steven2308

-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; 

 Смежные вопросы

  • Нет связанных вопросов^_^