Boa tarde Dickson! Vou respondendo às suas colocações abaixo, ok?
Em 1 de julho de 2011 13:45, Dickson S. Guedes <[email protected]>escreveu: > Em 1 de julho de 2011 11:32, Jeanne Louize Emygdio > <[email protected]> escreveu: > [ ... ] > > Talvez uma rápida olhada de vocês já será suficiente para orientar meus > > primeiros passos. > > Vou tentar comentar o código por partes > > > > CREATE FUNCTION doc_pendentes() Returns void AS ' > > Troque o apostofro por $$. > > Já corrigi essa falha de principiante! > DECLARE > > doc_matric varchar(15); > > doc_men1 varchar(76); > > doc_men2 varchar(76); > > gvc_docpend RECORD; > > gvc_docpend é uma tabela existente? > Sim, removi a declaração de RECORD que havia feito antes. Para usar a sugestão do JotaComm de usar o 'EXECUTE'. > > 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 > > Percebo que nos IFs seguintes você testa se doc_men2 é null, voce já > poderia usar um COALESCE(doc_men2,'') ali acima. > > > > > 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; > > Voce poderia evitar, com o COALESCE acima, este IF: 'if doc_men2 is > not null then'. A sua concatenação funcionaria dentro do UPPER sem > problemas e voce reduziria a duplicação de codigo depois do 'else if > is null then'. > Muito interessante isso, realmente o código está todo duplicado mesmo, eu iria posteriormente buscar uma forma de otimizar. Eu separei os dois blocos porque quando concatenava os campos e um era nulo, ficava tudo nulo e o resultado comprometido. Vou modificar e testar. > > /gvc_docpend/ espera 3 (três) atributos > (dcp_alumatric,dcp_aludocdescr,dcp_docentregue) mas voce só esta > passando 2 (dois) (doc_matric,“Certidão de nascimento”). Se um dos > valores tem um valor default definido ou voce omite ele do INSERT > INTO.. ou adiciona default no VALUES, como por exemplo: > > INSERT INTO gvc_docpend (dcp_alumatric,dcp_aludocdescr,dcp_docentregue) > VALUES (doc_matric,default, 'Certidão de nascimento'); > Ok. Já retirei a chamada ao campo que está com valor default no banco. > Em tempo ';' após as instruções. > Pode puxar minhas orelhas, mas mesmo para as instruções dentro dos IFs tenho que colocar ';' no final? Sei que é uma pergunta muito básica, mas quando trabalhamos com várias linguagens a gente acaba se confundindo um pouco. Vou pesquisar no manual, ok? > > > END FUNCTION' language plpgsql; > > Utilize $$ no lugar deste apostrofo. > Já fiz isso também, seguindo a sua orientação anterior. > > Por fim, mas não menos importante, outra alternativa eh fazer via > SELECT. Um exemplo seria fazer em SQL mesmo e o seu código acima > poderia ser resumido para algo assim: > > INSERT INTO gvc_docpend (dcp_alumatric, dcp_aludocdescr, dcp_docentregue) > SELECT doc_matric, > 'nao sei', > CASE > WHEN COALESCE(doc_men1,'') || COALESCE(doc_men2,'') > LIKE “%NASCIMENTO%” THEN 'Certidão de nascimento' > WHEN COALESCE(doc_men1,'') || COALESCE(doc_men2,'') > LIKE “%CASAMENTO%” THEN 'Certidão de casamento' > ... > ... > ... > WHEN COALESCE(doc_men1,'') || COALESCE(doc_men2,'') > LIKE “%IDENTIDADE%” THEN 'Documento de identidade' > ELSE 'um valor default' > END as documento > FROM fai__men > WHILE doc_matric is not null; > > Não tive tempo pra testar o exemplo acima, mas a logica seria mais ou > menos essa. > > Adorei esta sugestão, até porque, tirando a função COALESCE que eu não conhecia, já migrei dados de outras tabelas utilizando esta forma de sentença. Porém, receio que ela não poderia ser aplicada para este novo caso porque preciso verificar todas as condições para cada registro que for migrar de uma tabela para a outra e o case só me deixaria tratar uma condição por registro, não é? Por este motivo tive que vir para o plpgsql. > []s > -- > Dickson S. Guedes > mail/xmpp: [email protected] - skype: guediz > http://guedesoft.net - http://www.postgresql.org.br > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > Estou reorganizando o meu código e testando. Já, já posto novos resultados ou novas dúvidas. Muito obrigada pela atenção e pela educação dos assinantes desta lista. Há tempos que não contacto com pessoas assim. Grande abraço, 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
