Em 19-06-2012 13:40, Glauco Torres escreveu: > Boa Tarde Pessoal, > > Criamos uma FUNCTION com o seguinte código: > > CREATE OR REPLACE FUNCTION public.atualizar_cbo ( > "piFamilia" integer = 0, > "piCBO" integer = 0, > "psDescricao" text = ''::text > ) > RETURNS boolean AS > $body$ > DECLARE > viCBO INTEGER; > > BEGIN > -- raise notice 'chegou aqui finalmente'; > if piCBO = 0 then > -- raise notice 'chegou aqui2'; > PERFORM * from glb.cbofamilia cbof where cbof.idcbofamilia = piFamilia; > if not found then > insert into glb.cbofamilia (idcbofamilia, descricao) values > (piFamilia, CAST(psDescricao AS VARCHAR)); > end if; > else > PERFORM * from glb.cbo cbo where cbo.idcbofamilia = piFamilia and > cbo.idcbo = piCBO; > if not found then > insert into glb.cbo (idcbofamilia, idcbo, descricao) values > (piFamilia, piCBO, CAST(psDescricao AS VARCHAR)); > end if; > end if; > > RETURN True; > END; > $body$ > LANGUAGE 'plpgsql' > VOLATILE > CALLED ON NULL INPUT > SECURITY INVOKER > COST 100; > > Mais quando vamos fazer um SELECT... exemplo de SELECT > > select public.atualizar_cbo (2521,0,'ADMINISTRADORES'); > > ele da o seguinte erro: > > ERROR: column "picbo" does not exist > LINE 1: SELECT piCBO = 0 > ^ > QUERY: SELECT piCBO = 0 > CONTEXT: PL/pgSQL function "atualizar_cbo" line 7 at IF > > Gostaria de saber se existe alguma coisa de errada na criação dessa > FUNCTION, se sim qual é o erro que estamos cometendo.
Você declarou a variável piCBO entre aspas. Quando se usam aspas, a caixa é respeitada e a variável sempre terá de ser usada entre aspas. "piCBO" é diferente de piCBO picBO é igual a picbo que é igual a PICBO, ou seja, sem aspas, o PostgreSQL considera que é minúscula sempre. []s Flavio Henrique A. Gurgel Consultor e Instrutor 4Linux Tel: +55-11-2125-4747 www.4linux.com.br _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
