› Fóruns › SQL e PL/SQL › Execute immediate com SQL dinâmico › Execute immediate com SQL dinâmico
20 de outubro de 2011 às 2:11 pm
#101324
Participante
A solução encontrada no livro do ORACLE não é a melhor a ser seguida, mas funciona perfeitamente:
utilizar sempre todas as variáveis BIND quando colocado o “using” e adicionar ao select, alteranativas verdadeiras quando não deveria utilizar a variável.
Segue exemplo:
v_sql:=’select movimento from MOVIMENTO
where movimento > :p_mov’ –este é o único parâmetro fixo
||case when p_campo1 is not null
then ‘ and campo1 = :p_campo1’
else ‘ and (1=1 or :p_campo1 is null)’
end
…
||case when p_campo6 is not null
then ‘ and campo6 = :p_campo6’
else ‘ and (1=1 or :p_campo6 is null)’
end
Obrigado novamente.