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