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
