> Ol� comunidade,  (Postgres 8.2.4 e Distribui��o CentOS 4.5)
> 
> Preciso (MUITO) verificar em uma fun��o se uma dada tabela existe no banco.
> 
> O usu�rio envia uma determinada data pela entrada, a fun��o precisa
> verificar se essa tabela ainda existe (as tabelas est�o no formato
> bhpas_h_YYYY_MM_DD).
> 
> Se essa tabela n�o estiver on-line, preciso recarregar ela no banco atrav�s
> de 02 arquivos que est�o no mesmo servidor Linux no path /tmp/sage/arqs.
 
> Esse dois arquivos s�o bhpas_h_YYYY_MM_DD.dados e bhpas_h_YYYY_MM_DD.sqm;
> 
> Digamos que o usu�rio quer consultar dados de 06/11/2001; preciso verificar
> se existe uma tabela no banco chamada de bhpas_h_2001_11_06; Se n�o existir
> preciso carreg�-la atrav�s dos arquivos bhpas_h_2001_11_06.dados  e
> bhpas_h_2001_11_06.sqm que est�o no path /tmp/sage/arqs.
> 
> Eis o conte�do de bhpas_h_2001_11_06.sqm:
> 
> CREATE TABLE bhpas_h_2001_11_06 (BH_DTHR TIMESTAMP WITH TIME ZONE, BH_CHAVE
> INT, BH_VARIACAO INT , FLAG INT, FLAGEST SMALLINT, LINFA REAL, LINFE REAL,
> LINFU REAL, LSUPA REAL, LSUPE REAL, LSUPU REAL, RESNORM REAL, RGALR
> SMALLINT, VALEST REAL, VALOR REAL)
> 
> CREATE  INDEX pas_h_2001_11_06_A_I (bh_chave, bh_dthr)
> 
> UPDATE BH_pas_h_CTL SET BH_ESTADO='ONLINE', BH_DTHR=SYSTIMESTAMP() WHERE
> BH_NOME='bhpas_h_2001_11_06'\;\n
> 
> COPY bhpas_h_2001_11_06 FROM 'bhpas_h_2001_11_06.dados' DELIMITER ','
> 
> Uma outra quest�o � que preciso fazer isso dinamicamente.
> 
> Como fazer um EXECUTE 'SE EXISTE TAL TABELA RETORNE VERDADEIRO' sem que o
> postgres
> 
> retorne o seguinte erro: << cannot EXECUTE a null querystring >> ?
> 
> numa pl...
> 
> select relname from pg_class
> where relname = 'nome_da_sua_tabela' and relkind='r';
> 
> if not found
> 
> -- faz tudo o q vc precisa...
> 
> end if;
> 
> -- 
> Atenciosamente,
> Sebastian Selau Webber Colombo
 
 
Olá comunidade, fiz essa função baseado na dica do Sebastian, porém a mesma 
apresenta resultados errôneos, tipo, coloco datas que tenho certeza que não 
existe a tabela bhpas_h_YYYY_MM_DD e a função retorna que está presente. Acho 
que o execute tenha alguma coisa a ver com isso (isso também ocorre com o 
perform). 
 
O que tenho que fazer? No aguardo on-line.
 
 
CREATE OR REPLACE FUNCTION "Funcao_para_Testes"(data date)
  RETURNS integer AS
$BODY$
 
DECLARE sql varchar;
DECLARE aux varchar;
 
BEGIN
 
aux = replace(CAST(data AS varchar),'-','_');
sql = 'select "relname" from "pg_class" where "relname" = ''bhpas_h_' || aux || 
''' and "relkind"=''r''';
 
PERFORM sql;
 
IF NOT found THEN
        raise notice 'tabela NÃO ESTÁ presente - %',sql;
ELSE
        raise notice 'tabela está presente - %',sql;
END IF;
 
 
RETURN 0;
 
END;$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
 
 
SELECT "Funcao_para_Testes"('2000-02-05');

 

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

Responder a