Tem razão.

Obrigado pela ajuda!



Rubens José Rodrigues


-----Mensagem original-----
De: [email protected] 
[mailto:[email protected]] Em nome de Alexsandro Haag
Enviada em: terça-feira, 6 de julho de 2010 11:09
Para: Comunidade PostgreSQL Brasileira
Assunto: Re: [pgbr-geral] "cursor xxxx already in use" : onde estou errando?

Talvez no seu IF, você esteja retornando true antes de fechar o cursor...

if (current_date >= registros.datagozoini) and (current_date <= 
registros.datagozofim) then

return true;

close _registros;

Tente fechar antes do return...

Alex


On 06-07-2010 10:55, TI wrote:
>
> Olá pessoal,
>
> Preciso da ajuda de vocês no seguinte :
>
> a) Criei uma function que me retorna se um determinado funcionário 
> está de férias neste caso eu passo como parâmetro de entrada o código 
> do funcionário e retorno “Verdadeiro” ou “Falso” em suas situações. O 
> funcionamento está ok se usada isoladamente (select * from 
> fnc_funcionario_afastado(matricula))
>
> b) Quando usamos a function acima dentro de um select, como por 
> exemplo : select matricula, nome from funcionários where 
> (fnc_funcionario_afastado(matricula))=false o sistema retorna a 
> seguinte mensagem de erro : cursor "_registros" already in use.
>
> Cenário : PostgreSQL 8.4.1, compiled by Visual C++ build 1400, 32-bit 
> --> Windows XP
>
> Função :
>
> CREATE OR REPLACE FUNCTION "public"."fnc_funcionario_afastado" 
> ("eCodFunc" integer) RETURNS boolean AS
>
> $body$
>
> DECLARE
>
> -- ferias
>
> _registros cursor for select datagozoini,
>
> datagozofim
>
> from historico_ferias
>
> where codfuncionario=$1
>
> order by datagozofim;
>
> registros record;
>
> BEGIN
>
> -- abrindo o cursor do historico das ferias do funcionario;
>
> open _registros;
>
> loop
>
> fetch _registros into registros;
>
> exit when not found;
>
> if (current_date >= registros.datagozoini) and (current_date <= 
> registros.datagozofim) then
>
> return true;
>
> close _registros;
>
> exit;
>
> end if;
>
> end loop;
>
> close _registros;
>
> return false;
>
> END;
>
> $body$
>
> LANGUAGE 'plpgsql'
>
> VOLATILE
>
> CALLED ON NULL INPUT
>
> SECURITY INVOKER
>
> COST 100;
>
> Onde será que estou errando?
>
> Obrigado e no aguardo,
>
> Rubens José Rodrigues
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>    
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a