Bom dia Osvaldo,

Em 1 de julho de 2011 20:28, Osvaldo Kussama
<[email protected]>escreveu:

> Em 01/07/11, Jeanne Louize Emygdio<[email protected]> escreveu:
> > Bom...como nem tudo são flores...voltei...
> >
> > Durante a execução do código modificado após minha última postagem aqui,
> > obtive o seguinte erro:
> >
> > *
> >
> ---------------------------------------------------------------------------------------------------------------------------------
> > *
> >
> > *Erro de SQL:*
> >
> > ERRO:  não pôde encontrar tipo array para tipo de dado gvc_docpend
> > CONTEXT:  comando SQL "SELECT  'INSERT INTO' || $1 || '('
> > ||dcp_alumatric|| ',' ||dcp_aludocdescr|| ') VALUES (' || $2 || ',' ||
> > $3 || ')'"
> > PL/pgSQL function "doc_pendentes" line 13 at execute statement
> >
> > *Indicação de entrada :*
> > select doc_pendentes();
> > *
> >
> ---------------------------------------------------------------------------------------------------------------------------------
> > *
> > O código atual é:
> >
> > *
> >
> ---------------------------------------------------------------------------------------------------------------------------------
> > *
> >
> > DECLARE
> >     doc_nomedoc varchar;
> >     t_docp      gvc_docpend%rowtype;
> >     men         RECORD;
> > BEGIN
> >     FOR men IN SELECT men_cal1||men_cal2 AS matric, men_men1 AS men1,
> > men_men2 AS men2
> >                FROM fai__men
> >     LOOP
> >     IF men.matric is not null THEN
> >           if  (UPPER(COALESCE(men.men1,'')|| COALESCE(men.men2,''))
> > LIKE  '%NASCIMENTO%') then
> >               doc_nomedoc := 'Certidão de nascimento';
> >               EXECUTE 'INSERT INTO' ||t_docp|| '(' ||dcp_alumatric||
> > ',' ||dcp_aludocdescr|| ') VALUES (' ||men.matric|| ','
> > ||doc_nomedoc|| ')' ;
> >           end if;
> >           if  (UPPER(COALESCE(men.men1,'') || COALESCE(men.men2,''))
> > LIKE '%CASAMENTO%') then
> >               doc_nomedoc := 'Certidão de casamento';
> >               EXECUTE 'INSERT INTO' ||t_docp|| '(' ||dcp_alumatric||
> > ',' ||dcp_aludocdescr|| ') VALUES (' ||men.matric|| ','
> > ||doc_nomedoc|| ')';
> >           end if;
> >           if  (UPPER(COALESCE(men.men1,'') || COALESCE(men.men2,''))
> > LIKE  '%HISTORICO%') then
> >               doc_nomedoc := 'Histórico Escolar';
> >               EXECUTE 'INSERT INTO' ||t_docp|| '(' ||dcp_alumatric||
> > ',' ||dcp_aludocdescr|| ') VALUES (' ||men.matric|| ','
> > ||doc_nomedoc|| ')';
> >           end if;
> >           if  (UPPER(COALESCE(men.men1,'') || COALESCE(men.men2,''))
> > LIKE  '%IDENTIDADE%') then
> >                doc_nomedoc := 'Documento de Identidade';
> >                EXECUTE 'INSERT INTO' ||t_docp|| '(' ||dcp_alumatric||
> > ',' ||dcp_aludocdescr|| ') VALUES (' ||men.matric|| ','
> > ||doc_nomedoc|| ')';
> >           end if;
> >           if  (UPPER(COALESCE(men.men1,'') || COALESCE(men.men2,''))
> > LIKE  '%TITULO%') then
> >                doc_nomedoc := 'Título de eleitor';
> >                EXECUTE 'INSERT INTO' ||t_docp|| '(' ||dcp_alumatric||
> > ',' ||dcp_aludocdescr|| ') VALUES (' ||men.matric|| ','
> > ||doc_nomedoc|| ')';
> >           end if;
> >           if  (UPPER(COALESCE(men.men1,'') || COALESCE(men.men2,''))
> > LIKE '%RESERVISTA%') then
> >                doc_nomedoc := 'Certificado de Reservista';
> >                EXECUTE 'INSERT INTO' ||gvc_docpend|| '('
> > ||dcp_alumatric|| ',' ||dcp_aludocdescr|| ') VALUES (' ||men.matric||
> > ',' ||doc_nomedoc|| ')';
> >           end if;
> >           if  (UPPER(COALESCE(men.men1,'') || COALESCE(men.men2,''))
> > LIKE  '%FOTOS%') then
> >                doc_nomedoc := 'Fotos 3x4';
> >                EXECUTE 'INSERT INTO' ||gvc_docpend|| '('
> > ||dcp_alumatric|| ',' ||dcp_aludocdescr|| ') VALUES (' ||men.matric||
> > ',' ||doc_nomedoc|| ')';
> >           end if;
> >      END IF;
> >      END LOOP;END;
> >
> > *
> >
> ---------------------------------------------------------------------------------------------------------------------------------
> >
> > *Se a minha dúvida for muito básica para esta lista podem me direcionar
> para
> > a lista correta, ok?*
> >
>
>
> Não entendi algumas coisas:
> -  t_docp é uma variável do tipo linha conforme a definição de
> gvc_docpend. Ela não é uma tabela, não tem sentido você tentar dar um
> INSERT nela.
>
Então...acho que é exatamente aqui que está o meu problema. Estava
pesquisando aqui uma forma de atualizar direto a tabela gvc_docpend, mas
ainda não deu certo.

- da maneira como você encadeou seus comandos if dá a entender que um
> mesmo registro mem pode atender a diversas condições, isto é uma fato?
>
Sim. Isto é um fato.


> - porque você não faz:
>
FOR men IN SELECT men_cal1||men_cal2 AS matric,
> upper(coalesce(men_men1,'') || coalesce(men_men2,'')) AS menx
> FROM fai__men
> e simplifica seus testes.
>
Ok. Obrigada pela dica.


> - dcp_alumatric e dcp_aludocdescr são efetivamente variáveis cujo
> conteúdo é o nome do campo a ser inserido?
>
Sim.

>
> Osvaldo
>

Obrigada e uma ótima semana!
Jeanne

> _______________________________________________
> 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

Responder a