2009/10/1 Jose adriano Alves <[email protected]>

>
> <corte>
>
> *  /* isso ja evita fazer 3 selects */
>
>    select into* v_idcarrro
>                   , v_vvenda
>                   , v_idvend *
>     from *(  *select *v.carro, v.valor, v.vendedor *from *public.venda v 
> *where
> *v.idvenda = p_idvenda  );      /*  seta os valor na variavel a partir do
> select */
>

Não há necessidade do Sub-Select... nesse caso basta:

*select *v.carro, v.valor, v.vendedor
*   into* v_idcarrro, v_vvenda, v_idvend
  *from *public.venda v
*where *v.idvenda = p_idvenda


Olhando melhor as tuas queries não resolveria um SQL com algumas junções:

SELECT venda.carro,
       carro.zero_km,
       COALESCE(venda.valor, 0) as valor,
       COALESCE(vendedor.comissao, 0) as comissao
  INTO v_idcarro,
       v_zerokm,
       v_vvenda,
       v_c_vend
  FROM venda
       LEFT JOIN carro    ON carro.idcarro       = venda.carro
       LEFT JOIN vendedor ON vendedor.idvendedor = venda.vendedor
 WHERE venda.idvenda = p_idvenda;


Pelo conteúdo da tua PL creio que o SELECT acima traria todas as informações
necessárias...



>   /* como voce vai usar somente essa vez a verificacao de carro zero, pode
> inserir diretamente a verificacao  */
>   IF ( *SELECT *c.zero_km *FROM *public.carro c *WHERE *c.idcarro =
> v_idcarro *LIMIT *1) = TRUE THEN   /* quando nao usar agregacao ( sum,
> count, avg, etc) usa o limit 1 por exemplo, ou aplique a agragacao
> necessaria  */
>
>
Eu usaria o EXISTS nesse caso:

IF EXISTS(SELECT 1 FROM public.carro c WHERE c.idcarro = v_idcarro) THEN
...



Cordialmente,

-- 
Fabrízio de Royes Mello
>> Blog sobre TI: http://fabriziomello.blogspot.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a