Criação de Sequence

Oracle

22/05/2007

Pessoal, Boa Tarde!

Estou necessitando criar algumas sequences num cliente e para isso montei um declare conforme descrito abaixo, mas o mesmo esta dando msg de erro justamente na criação da sequence.
Montei esse declare justamente para o cliente não precisar fazer um select max e depois pegar o valor e indicar no start.
Alguem saberia como resolver esse problema?
Muitissimo obrigado pela ajuda.

declare
vMax int;
begin
declare
cursor c_MovUsu is
select max(codigo_mus) from avt_mov_usuario;
begin
open c_MovUsu;
fetch c_MovUsu into vMax;

if(c_MovUsu¬found) then
vMax := vMax + 1;
else
vMax := 1;
end if;

create sequence Seq_AmuCodMus increment by 1 start with vMax nocycle;

close c_MovUsu;
end;
end;


Gordonsp

Gordonsp

Curtidas 0

Respostas

Motta

Motta

22/05/2007

Não se pode usar comandos de ddl no pl/sql use o execute immediate

declare 
vMax int; 
begin 
declare 
cursor c_MovUsu is 
select max(codigo_mus) from avt_mov_usuario; 
begin 
open c_MovUsu; 
fetch c_MovUsu into vMax; 

if(c_MovUsu¬found) then 
vMax := vMax + 1; 
else 
vMax := 1; 
end if; 

execute immediate (´create sequence Seq_AmuCodMus increment by 1 start with vMax nocycle´); 

close c_MovUsu; 
end; 
end;



GOSTEI 0
Motta

Motta

22/05/2007

corrigindo :

declare 
vMax int; 
vSql varchar2(100);
begin 
declare 
cursor c_MovUsu is 
select max(codigo_mus) from avt_mov_usuario; 
begin 
open c_MovUsu; 
fetch c_MovUsu into vMax; 

if(c_MovUsu¬found) then 
vMax := vMax + 1; 
else 
vMax := 1; 
end if; 
vSql := ´create sequence Seq_AmuCodMus increment by 1 start with ´  || vMax || ´ nocycle´); 

execute immediate (vSql); 

close c_MovUsu; 
end; 
end; 




GOSTEI 0
Gordonsp

Gordonsp

22/05/2007

Motta,

Muitissimo obrigado, resolveu meu problema em 100¬.

Atenciosamente

Anderson


GOSTEI 0
POSTAR