2009/10/21 <[email protected]>

>  Bom dia a todos,
>
> Tenho a seguinte Função:
>
> CREATE OR REPLACE FUNCTION prog_op(integer,character
> varying,integer,character varying)
>   RETURNS void AS
> $BODY$
> BEGIN
>  ....
>    CREATE TEMPORARY TABLE numeros_op ( lote_op integer, cod_ref
> varchar(16), cod_op integer, numero varchar(5), quantidade integer ) WITHOUT
> OIDS;
>  .....
>   DROP TABLE numeros_op;
>  ....
> END;
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE;
>
> Na primeira vez executo a função sem problemas, na segunda vez da a
> seguinte mensagem:
>   ERROR:  relation with OID 2212534 does not exist
>   CONTEXT:  SQL statement "INSERT INTO
> senda.ind_03_03_02_01_02(cod_op,remessa,cod_ref,numero,quantidade)
>                                            SELECT c.cod_op, $1
> ,c.cod_ref,c.numero,SUM(c.quantidade) FROM numeros_op c GROUP BY
> c.lote_op,c.cod_op,c.cod_ref,c.numero
>                                            ORDER BY
> c.lote_op,c.cod_op,c.cod_ref,c.numero " PL/pgSQL function "prog_op" line 81
> at SQL statement
>
> Aí só encerrando a sessão.
>
> Estou usando Postgres 8.1 .
>
> Alguém tem alguma idéia do que poderia ser?
>
>

Caro Irieneu,

Esse é um problema com versões anteriores a 8.3, conforme descrito no FAQ
[1], mas que é contornável...

Para resolver o problema basta executar a criação da tua tabela temporária
"dinâmicamente", ou seja, com o EXECUTE. Tente:

EXECUTE 'CREATE TEMPORARY TABLE numeros_op ( lote_op integer, cod_ref
varchar(16), cod_op integer, numero varchar(5), quantidade integer ) ON
COMMIT DROP';

Note que adicionei o "ON COMMIT DROP", e com isso não existe necessidade do
"DROP TABLE" ao final da tua função.

Espero ter ajudado.


[1] http://www.postgresql.org/docs/faqs.FAQ_brazilian.html#item4.19

-- 
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