Execute Immediate

Este forum é dedicado a códigos errados que se encontram por aí, ou seja, coisas que não se deve fazer de jeito nenhum! Não coloque neste forum dúvidas! (apenas situações bizarras do nosso dia a dia :-)
  

Mensagemem Ter, 11 Mai 2010 1:42 pm

Alguém me explica POR QUE usar execute immediate nesse comando ?

Código: Selecionar todos
EXECUTE IMMEDIATE 'DELETE tabela WHERE SUPPLIER_CCN = :CCN' USING P_CCN;


Porque não fez direto o DELETE ?
Código: Selecionar todos
DELETE tabela WHERE SUPPLIER_CCN = P_CCN;


:(
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Mensagemem Ter, 11 Mai 2010 2:01 pm

acho que pra reaproveitar a instrução em cache,

fazendo apenas bind,

:D

deve executar varias vezes esse delete, so trocando o parametro não é??

em relação a performance isso é ótimo...

;)
diegolenhardt
Localização: Recife

Mensagemem Ter, 11 Mai 2010 2:04 pm

Não roda várias vezes... Deve rodar 1 vez por dia :-(

outra coisa:
O BIND também é usado aqui:
Código: Selecionar todos
DELETE tabela WHERE SUPPLIER_CCN = P_CCN;

esse P_CCN é um parâmetro da procedure. É a forma mais limpa de comando SQL...


Eu concordo que isso
Código: Selecionar todos
EXECUTE IMMEDIATE 'DELETE tabela WHERE SUPPLIER_CCN = :CCN' USING P_CCN;

é muito melhor que isso:
Código: Selecionar todos
EXECUTE IMMEDIATE 'DELETE tabela WHERE SUPPLIER_CCN='|| P_CCN;



Mas acho que um DELETE direto é melhor ainda...
Código: Selecionar todos
DELETE tabela WHERE SUPPLIER_CCN = P_CCN;
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Mensagemem Ter, 11 Mai 2010 2:07 pm

è verdade, parece que não tem muito sentido mesmo, se você diz que usa BIND no delete normal, ficaria na mesma mesmo, ainda mais sendo que é uma vez só por dia, sem necessidade para tal..


=]
diegolenhardt
Localização: Recife

Mensagemem Ter, 11 Mai 2010 2:16 pm

Sim, num sql como esse, usando variáveis, o oracle transforma as variáveis pra BIND automaticamente.

Se você rodar um trace, verá que não tem como ver o VALOR das variáveis, apenas o sql. Onde tem variáveis, ele altera pra :1, :2, etc... --> binds.

Oracle ROCKS.

:-o
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered



Voltar para Códigos Duvidosos

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante