Truncar tabela de acordo com nome da tabela

1. Truncar tabela de acordo com nome da tabela

Filipe de Jesus Lobato
FJLobato

(usa CentOS)

Enviado em 27/09/2016 - 15:11h

Boa tarde, galera.

Estou com um código em Plpgsql que está dando o seguinte erro:

ERROR:  column "fonte_dados" does not exist
LINE 1: DELETE FROM tmp."_OMA_jan0114_alr" WHERE fonte_dados='alr';


Que eu já sei pois a coluna não existe, nessa hipóteses, e o conteúdo da coluna fica justamente no próprio nome da tabela. Gostaria de saber se há como eu ler apenas uma parte do nome que me convém da tabela pelo plpgsql.

 ELSIF ( str_nometipogravacaodados = 'tmp2' ) THEN
sql = 'DELETE FROM tmp."' || str_nome_tabela || '" WHERE fonte_dados=''' || str_fonte_dados || ''';';



O formato do nome da tabela é o seguinte e na tabela não posso adicionar a coluna fonte_dados:
_OMA_jan0114_alr 


Quero que ele compare str_fonte_dados com o nome depois do último _ (underline) da tabela, que neste caso foi "alr" mas é de acordo com variável.

Tentei dessa forma não deu certo:

ELSIF ( str_nometipogravacaodados = 'tmp2' ) THEN
PERFORM SUBSTR(str_nome_tabela,0,13) AS "str_nome_tabela_sem_fonte_dados";
PERFORM SUBSTR(str_nome_tabela,14,3) AS "str_nome_fonte_dados";
sql = 'DELETE FROM tmp."' || str_nome_tabela_sem_fonte_dados || str_nome_fonte_dados'";''





  


2. Re: Truncar tabela de acordo com nome da tabela

Filipe de Jesus Lobato
FJLobato

(usa CentOS)

Enviado em 28/09/2016 - 15:31h

Gente, ainda estou com a dúvida, alguém pode ajudar?


3. Re: Truncar tabela de acordo com nome da tabela

Savio Nascimento
saviounix

(usa Debian)

Enviado em 19/10/2016 - 16:36h

FJLobato escreveu:

Boa tarde, galera.

Estou com um código em Plpgsql que está dando o seguinte erro:

ERROR:  column "fonte_dados" does not exist
LINE 1: DELETE FROM tmp."_OMA_jan0114_alr" WHERE fonte_dados='alr';


Que eu já sei pois a coluna não existe, nessa hipóteses, e o conteúdo da coluna fica justamente no próprio nome da tabela. Gostaria de saber se há como eu ler apenas uma parte do nome que me convém da tabela pelo plpgsql.

 ELSIF ( str_nometipogravacaodados = 'tmp2' ) THEN
sql = 'DELETE FROM tmp."' || str_nome_tabela || '" WHERE fonte_dados=''' || str_fonte_dados || ''';';



O formato do nome da tabela é o seguinte e na tabela não posso adicionar a coluna fonte_dados:
_OMA_jan0114_alr 


Quero que ele compare str_fonte_dados com o nome depois do último _ (underline) da tabela, que neste caso foi "alr" mas é de acordo com variável.

Tentei dessa forma não deu certo:

ELSIF ( str_nometipogravacaodados = 'tmp2' ) THEN
PERFORM SUBSTR(str_nome_tabela,0,13) AS "str_nome_tabela_sem_fonte_dados";
PERFORM SUBSTR(str_nome_tabela,14,3) AS "str_nome_fonte_dados";
sql = 'DELETE FROM tmp."' || str_nome_tabela_sem_fonte_dados || str_nome_fonte_dados'";''



_____________________________________________________________________________________

Boa tarde FJLOBATO,

Pelo que vi, você quer deletar um registro da tabela cujo conteudo da coluna 'fonte_dados' seja igual a string após o último "_" (underline), correto?

Se sim, eis uma possível solução:


ELSIF ( str_nometipogravacaodados = 'tmp2' ) THEN
v_count = 1;

SELECT TRIM(str_nome_tabela, '_')||'_' INTO v_aux;

LOOP
IF ((SELECT SPLIT_PART(v_aux, '_', v_count)) <> '') THEN
v_count = v_count + 1;
ELSE
EXIT;
END IF;
END LOOP;

str_fonte_dados = (SELECT SPLIT_PART(v_aux, '_', v_count))::BPCHAR;

sql = 'DELETE FROM tmp."' || str_nome_tabela || '" WHERE fonte_dados=''' || str_fonte_dados || ''';' ;
[........]


Espero que ter ajudado.
Caso tenha dúvidas com o código, estou a disposição para ajudar.

Att[]

Savio



4. Re: Truncar tabela de acordo com nome da tabela

Filipe de Jesus Lobato
FJLobato

(usa CentOS)

Enviado em 19/10/2016 - 18:00h

Está dando erro.. Aparece:
ERROR:  invalid input syntax for integer: "OMA_jan0114_alr_"
CONTEXT: PL/pgSQL function alr._criar_tabela_arquivo_sage(character varying,character varying,date,character varying,character varying,character varying) line 32 at SQL statement
********** Error **********

ERROR: invalid input syntax for integer: "OMA_jan0114_alr_"
SQL state: 22P02
Context: PL/pgSQL function alr._criar_tabela_arquivo_sage(character varying,character varying,date,character varying,character varying,character varying) line 32 at SQL statement


O nome da tabela criado é _OMA_jan0114_alr
No erro aparece : OMA_jan0114_alr_ , algum erro de nomenclatura?


5. Re: Truncar tabela de acordo com nome da tabela

Savio Nascimento
saviounix

(usa Debian)

Enviado em 19/10/2016 - 18:19h

FJLobato escreveu:

Está dando erro.. Aparece:
ERROR:  invalid input syntax for integer: "OMA_jan0114_alr_"
CONTEXT: PL/pgSQL function alr._criar_tabela_arquivo_sage(character varying,character varying,date,character varying,character varying,character varying) line 32 at SQL statement
********** Error **********

ERROR: invalid input syntax for integer: "OMA_jan0114_alr_"
SQL state: 22P02
Context: PL/pgSQL function alr._criar_tabela_arquivo_sage(character varying,character varying,date,character varying,character varying,character varying) line 32 at SQL statement


O nome da tabela criado é _OMA_jan0114_alr
No erro aparece : OMA_jan0114_alr_ , algum erro de nomenclatura?



Boa tarde FSLOBATO,

Poderia, se possível, mostrar seu 'programa' completo aqui nos tópicos? Apenas para que eu consiga entender melhor onde está o erro.
Caso ache necessário, e sei que será, mude os nomes de tabela por segurança.

Fico no aguardo de sua resposta.

Att[]
Savio






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts