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
