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
