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
