Não, consulte o manual Oracle "PL/SQL User´s Guide" que vc vai ver que
em PL/SQL o IF ** não aceita ** uma expressão SQL : vc terá que OU
colocar o valor numa variável, OU escrever uma função que retorne
BOOLEAN cfrme achou ou não linhas e pedir IF minhafunc THEN ... , Ou
usar um construto diferente, como por exemplo :
  for r in (select) loop
    ... comandos que tem que ser executados se a query tiver linhas
  end loop;

==> e isso, é CLARO, supondo que a verificação TEM que ser feita, se o
teu objetivo é fazer um UPDATE se houver regs nas condições, digamos,
tranquilamente vc poderia fazer diretamente :

 update tabela where condições;
 x := sql%rowcount;
 if x > 0 then
    não havia linhas a alterar...

OBS : vc não diz, mas pelo jeito usava outro banco, certo ? Acima vc
está vendo que NÂO TEM JEITO, bancos diferentes implementas sintaxes
diferentes, vc VAI TER ALTERAÇÕES sim nesse sistema.... E é claro, há
diferenças *** PROFUNDAS *** no mecanismo de travamento de registros,
no processamento de transações, no bloqueio, enfim, em MUITOS pontos
do Oracle em relação aà outros (em especial SQLServer), se o sistema é
não-trivial vc VAI TER SIM muitas alterações importantes pra fazer se
é exigida performance ao menos razoável, vc VAI ter peixes muito muito
maiores pra fritar...

[]s

 Chiappa
--- Em oracle_br@yahoogrupos.com.br, "eduguiso" <[EMAIL PROTECTED]> escreveu
>
> Pessoal posso usar select desta maneira dentro de trigger ?
> 
> if ((select count(*) from t3 where cod = :new.cod) > 1) then
>   ....
>   ....
> end if;
> 
> Talvez a melhor maneira seria inserir o resultado do count(*) em uma 
> variável, mas tenho um sistema inteiro escrito desta forma e estou 
> convertendo para Oracle, portanto preciso mexer o mínimo possível.
> 
> Valeu.
> 
> Eduardo
>


Responder a