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 :-)
Responder
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

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

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

Selecionar tudo

EXECUTE IMMEDIATE 'DELETE tabela WHERE SUPPLIER_CCN = :CCN' USING P_CCN;
Porque não fez direto o DELETE ?

Selecionar tudo

DELETE tabela WHERE SUPPLIER_CCN = P_CCN; 
:(
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

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

;)
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

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

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

outra coisa:
O BIND também é usado aqui:

Selecionar tudo

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

Selecionar tudo

EXECUTE IMMEDIATE 'DELETE tabela WHERE SUPPLIER_CCN = :CCN' USING P_CCN;
é muito melhor que isso:

Selecionar tudo

EXECUTE IMMEDIATE 'DELETE tabela WHERE SUPPLIER_CCN='|| P_CCN;

Mas acho que um DELETE direto é melhor ainda...

Selecionar tudo

DELETE tabela WHERE SUPPLIER_CCN = P_CCN;
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

è 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..


=]
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

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

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
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes