Ambos
alter sequence
instruções estão funcionando, é o incremento no meio que não está acontecendo. O nextval
call em seu loop não está sendo avaliada porque a instrução select não está enviando sua saída para nenhum lugar. Da da documentação
, uma nota que se refere exatamente ao que você está fazendo:Então você precisa selecionar esse valor em algo:
declare
st VARCHAR(1024);
val number;
begin
for x in (SELECT sequence_name FROM USER_SEQUENCES) loop
st := 'ALTER SEQUENCE ' || x.sequence_name || ' INCREMENT BY 1000';
execute immediate st;
st := 'select ' || x.sequence_name || '.nextval from dual';
execute immediate st into val;
st := 'ALTER SEQUENCE ' || x.sequence_name || ' INCREMENT BY 1';
execute immediate st;
end loop;
end;
/
Eu adicionei um
val
variável e um into val
cláusula na segunda execução imediata. Para demonstrar que funciona agora:
create sequence s42;
Sequence s42 created.
declare
st VARCHAR(1024);
n number;
begin
for x in (SELECT sequence_name FROM USER_SEQUENCES) loop
st := 'ALTER SEQUENCE ' || x.sequence_name || ' INCREMENT BY 1000';
execute immediate st;
st := 'select ' || x.sequence_name || '.nextval from dual';
execute immediate st into n;
st := 'ALTER SEQUENCE ' || x.sequence_name || ' INCREMENT BY 1';
execute immediate st;
end loop;
end;
/
anonymous block completed
select s42.nextval from dual;
NEXTVAL
----------
1001
Sem o
into
cláusula, isso voltou com 1 em vez de 1001, que é o que você está vendo.