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 $$.
> DECLARE
> doc_matric varchar(15);
> doc_men1 varchar(76);
> doc_men2 varchar(76);
> gvc_docpend RECORD;
gvc_docpend é uma tabela existente?
> 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'.
/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');
Em tempo ';' após as instruções.
> END FUNCTION' language plpgsql;
Utilize $$ no lugar deste apostrofo.
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.
[]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