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.
- 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?
- 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.
- dcp_alumatric e dcp_aludocdescr são efetivamente variáveis cujo
conteúdo é o nome do campo a ser inserido?

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a