Caro Fabrízio,

Valeu pela dica, resolvi o problema usando 'EXECUTE' cfe vc me indicou; foi só 
reescrever a função e pronto.


Atenciosamente, 

Irineu Raymundo
Senda Engenharia de Dados Ltda.
www.senda.inf.br
(48) 3265 1379


  ----- Original Message ----- 
  From: Fabrízio de Royes Mello 
  To: Comunidade PostgreSQL Brasileira 
  Sent: Thursday, October 22, 2009 8:34 AM
  Subject: Re: [pgbr-geral]Função com Tabela Temporária Que Não Apaga





  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

  
------------------------------------------------------------------------------------------------------------------
 
  Esta mensagem foi verificada pelo sistema de Segurança da SJB Solados. 



------------------------------------------------------------------------------


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

------------------------------------------------------------------------------------------------------------
Esta mensagem foi verificada pelo sistema de Segurança da SJB Solados Ltda. 

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

Responder a