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

Responder a