Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luciano Heric

execute immediate ...

Recommended Posts

Quando informo a seguinte instrução :BEGIN EXECUTE IMMEDIATE 'ALTER TABLE TFPFUN ADD TIPDEFICIENCIA DECIMAL(5, 0) DEFAULT 0 ADD CONSTRAINT CKC_TIPDEFICIENCIA_TFPFUN CHECK (TIPDEFICIENCIA IN (0,1,2,3,4,5,6))'; EXECUTE IMMEDIATE 'UPDATE TFPFUN SET TIPDEFICIENCIA = 0'; EXECUTE IMMEDIATE 'ALTER TABLE TFPFUN MODIFY TIPDEFICIENCIA DEFAULT 0 NOT NULL'; UPDATE TFPFUN SET TIPDEFICIENCIA = CASE WHEN DEFICIENTEFISICO = 'N' THEN 0 ELSE 1 END; END;/Preciso que o campo seja criado antes do Update porém o Update deve ser na criação do campo. O que posso fazer...a solução acima me retorna que TIPDEFICIENCIA não é um indicador válido ou seja, o campo não foi criado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o default não precisa do update !!

Mas na realidade eu preciso popular esta coluna conforme o case...
Acho que você não está entendendo...Quando o campo for criado a tabela já estará populada e eu precisarei no momento da criação deste campo populá-lo conforme o valor do campo DEFICIENTEFISICO...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o default não precisa do update !!

Mas na realidade eu preciso popular esta coluna conforme o case...
Acho que você não está entendendo...Quando o campo for criado a tabela já estará populada e eu precisarei no momento da criação deste campo populá-lo conforme o valor do campo DEFICIENTEFISICO...
Então me mostra como...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez o tempo de criação da coluna acho que o execute immediate não espera o fim, nunca fiz algo assim , mas tente :

 

1) Por um tempo de espera , acho que o comando é DELAY(SEC)

 

ou

 

2) Não criar com o default , criar como null e após o update fazer outro alter para a coluna

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez o tempo de criação da coluna acho que o execute immediate não espera o fim, nunca fiz algo assim , mas tente :1) Por um tempo de espera , acho que o comando é DELAY(SEC)ou2) Não criar com o default , criar como null e após o update fazer outro alter para a coluna

Nunca usei DELAY... Tem que declarar...?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez o tempo de criação da coluna acho que o execute immediate não espera o fim, nunca fiz algo assim , mas tente :1) Por um tempo de espera , acho que o comando é DELAY(SEC)ou2) Não criar com o default , criar como null e após o update fazer outro alter para a coluna

Nunca usei DELAY... Tem que declarar...?
Assim consegui resolver:BEGIN EXECUTE IMMEDIATE 'ALTER TABLE TFPFUN ADD TIPDEFICIENCIA NUMBER(5) DEFAULT 0 NOT NULL'; EXECUTE IMMEDIATE 'ALTER TABLE TFPFUN ADD CONSTRAINT CKC_TIPDEFICIENCIA_TFPFUN CHECK (TIPDEFICIENCIA IN (0,1,2,3,4,5,6))'; EXECUTE IMMEDIATE 'UPDATE TFPFUN SET TIPDEFICIENCIA = CASE WHEN DEFICIENTEFISICO = ''N'' THEN 0 ELSE 1 END'; END;/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo , o Execute Immediate aguarda o fim da execução ou roda em paralelo ??!!

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Ele executa a instrução IMEDIATAMENTE mesmo durante o processo, ele já efetua o PARSE e valida os dados, seja para instrução DML ou DDL.

 

Mais utilizado em DDL. Se quizer, para instruções DML, pode utilizar um HINT de PARALLEL que irá paralelizar a instrução, para ganhos de performance.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.