Bom dia JotaComm,

é isso mesmo que você entendeu. Mas eu mesma tenho dúvida se esta declaração
está correta.

A situação no meu banco de dados é a seguinte: Tenho uma tabela FAI__MEN e
quero tratar seus dados para alimentar outra tabela GVC_DOCPEND.

A declaração que fiz é suficiente para o que eu quero fazer? Se eu mudar o
insert into para a qry dinâmica vou conseguir alimentar a tabela
GVC_DOCPEND, ou tenho que criá-la dentro da função para funcionar?

Será que consegui explicar ou compliquei? rssss...

Obrigada.

Jeanne

Em 1 de julho de 2011 11:50, JotaComm <[email protected]> escreveu:

> Olá,
>
>
> Em 1 de julho de 2011 11:32, Jeanne Louize Emygdio <
> [email protected]> escreveu:
>
>> Prezados membros da lista,
>>
>>
>> bom dia!
>>
>> Sou iniciante em programação utilizando a linguagem plpgsql e tenho
>> dúvidas sobre algumas mensagens de erro que tenho recebido ao tentar criar
>> uma pequena função para migração de dados entre duas tabelas.
>>
>> Talvez uma rápida olhada de vocês já será suficiente para orientar meus
>> primeiros passos.
>>
>
> Pelo que vi a sua tabela é definida numa variável RECORD correto?
>
> DECLARE
>
> gvc_docpend RECORD;
>
> E ai depois você quer fazer INSERT nela?
>
> Neste caso você tem que trabalhar com consultas dinâmicas, vide comando
> EXECUTE [1].
>
> Por exemplo:
>
> EXECUTE 'INSERT INTO ' || gvc_docpend || ' ...;
>
>
> Agradeço antecipadamente a atenção.
>>
>> Segue o código:
>>
>> CREATE FUNCTION doc_pendentes() Returns void AS '
>>
>> DECLARE
>>     doc_matric  varchar(15);
>>     doc_men1    varchar(76);
>>     doc_men2    varchar(76);
>>     gvc_docpend RECORD;
>>
>> BEGIN
>>
>>
>>  SELECT men_cal1||men_cal2, men_men1, men_men2
>>
>> INTO doc_matric, doc_men1, doc_men2
>>
>> FROM fai__men;
>>
>>
>>  WHILE doc_matric is not null
>>
>> LOOP
>>
>>  if doc_men2 is not null then
>>
>> if UPPER(doc_men1||doc_men2) LIKE “%NASCIMENTO%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric,dcp_aludocdescr,dcp_docentregue)
>> VALUES (doc_matric,“Certidão de nascimento”)
>>
>>  endif;
>>
>> if UPPER(doc_men1||doc_men2) LIKE “%CASAMENTO%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Certidão de casamento”)
>>
>> endif;
>>
>> if UPPER(doc_men1||doc_men2) LIKE “%HISTORICO%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric , “Histórico Escolar”)
>>
>> endif;
>>
>> if UPPER(doc_men1||doc_men2) LIKE “%IDENTIDADE%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Documento de Identidade”)
>>
>> endif;
>>
>> if UPPER(doc_men1||doc_men2) LIKE “%TITULO%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Título de eleitor”)
>>
>> endif;
>>
>> if UPPER(doc_men1||doc_men2) LIKE “%RESERVISTA%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Certificado de Reservista”)
>>
>> endif;
>>
>> if UPPER(doc_men1||doc_men2) LIKE “%FOTOS%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Fotos 3x4”)
>>
>> endif
>>
>> else if doc_men2 is null then
>>
>> if UPPER(doc_men1) LIKE “%NASCIMENTO%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Certidão de nascimento”)
>>
>> endif;
>>
>> if UPPER(doc_men1) LIKE “%CASAMENTO%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Certidão de casamento”)
>>
>> endif;
>>
>> if UPPER(doc_men1) LIKE “%HISTORICO%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Histórico Escolar”)
>>
>> endif;
>>
>> if UPPER(doc_men1) LIKE “%IDENTIDADE%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Documento de Identidade”)
>>
>> endif;
>>
>> if UPPER(doc_men1) LIKE “%TITULO%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Título de eleitor”)
>>
>> endif;
>>
>> if UPPER(doc_men1) LIKE “%RESERVISTA%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Certificado de Reservista”)
>>
>> endif;
>>
>> if UPPER(doc_men1) LIKE “%FOTOS%” then
>>
>> INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue)
>> (doc_matric, “Fotos 3x4”)
>>
>>  endif;
>>
>> endif
>>
>> END LOOP;
>>
>> END WHILE;
>>
>> END FUNCTION' language plpgsql;
>>
>> *ERROS OBTIDOS*:
>>
>> **
>>
>> *Erro de SQL:*
>>
>> ERRO:  erro de sintaxe em ou próximo a "$1"
>> LINE 1: INSERT INTO  $1  (dcp_alumatric,dcp_aludocdescr,dcp_docentre...
>>                      ^
>> QUERY:  INSERT INTO  $1  (dcp_alumatric,dcp_aludocdescr,dcp_docentregue) 
>> VALUES ( $2 ,“Certidão de nascimento”) endif
>> CONTEXT:  SQL statement in PL/PgSQL function "doc_pendentes" near line 19
>>
>> Terei que criar outra função que irá receber como parâmetros de entrada os 
>> dados que tratei nesta função para que eu consiga fazer a inserção dos dados 
>> na tabela gvc_docpend?
>>
>>
>> Já lí o Manual do postgresql referente ao INSERT INTO mas não entendi na 
>> prática onde estou errando. Há alguma maneira mais ágil de se fazer o 
>> tratamento que estou fazendo aqui?
>> Aceito sugestões.
>>
>> Abraço a todos,
>>
>>
>> Jeanne
>>
>> ------------------------------------------------------------------------------------------------------------------------------
>>
>> "O bem que praticas em qualquer lugar será teu advogado em toda parte."
>> Emmanuel
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> [1] http://www.postgresql.org/docs/9.0/interactive/plpgsql-statements.html
>
> Abraços
>
> --
> JotaComm
> http://jotacomm.wordpress.com
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 
"O bem que praticas em qualquer lugar será teu advogado em toda parte."
Emmanuel
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a