2009/10/1 Bruno Carneiro <guimaraescarne...@gmail.com>:
>
> Estou estudando plpgsql mas confesso que não estou entendo uma coisa.
>
> Eu declarei uma variável, e estou tentando atribuir um valor escalar a ela
> que vem de um SQL, mas eu recebo um erro informando que não é permitido
> fazer isso.
>
> Erro de SQL:
>
> ERRO:  erro de sintaxe em ou próximo a "SELECT"
> LINE 1: SELECT  SELECT carro FROM venda WHERE idvenda =  $1
>                ^
> QUERY:  SELECT  SELECT carro FROM venda WHERE idvenda =  $1
> CONTEXT:  SQL statement in PL/PgSQL function "comissao_new" near line 10
>
> Indicação de entrada :
>
> CREATE FUNCTION comissao_new(p_idvenda integer)
> RETURNS numeric(8,2) AS $$
>
> DECLARE
>   v_idcarro integer;
>   v_zerokm boolean;
>   v_vvenda numeric(8,2);
>   v_vend integer;
>   v_c_vend numeric(8,2);
>
> BEGIN
>   v_idcarro := SELECT carro FROM venda WHERE idvenda = p_idvenda;
>   v_zerokm := SELECT zero_km FROM carro WHERE idcarro = v_idcarro;
>   v_vvenda := SELECT valor FROM venda WHERE idvenda = p_idvenda;
>   v_idvend := SELECT vendedor FROM venda WHERE idvenda=p_idvenda;
>   v_c_vend := SELECT comissao FROM vendedor WHERE idvendedor = v_idvend;
>
>   IF v_zerokm THEN
>      RETURN (v_vvenda - custo_total(v_idcarro) )*v_c_vend;
>   ELSE
>      RETURN v_vvenda * v_c_vend;
>   END IF;
>
> END;
>
>
> $$ LANGUAGE plpgsql;
>
> Afinal, como eu posso fazer essa atribuição. Encontrei algo pareceido em
> SELECT * INTO ... mas neste caso a variável não pode ser escalar, como eu
> desejo.
> --


Tente:
SELECT carro FROM venda WHERE idvenda = p_idvenda INTO v_idcarro;
o mesmo para os demais campos/SELECT.

Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a