o que eu to tentando fazer é o seguinte: eu tenho uma tabela andamento remessa que armazena todo o andamento de uma remessa até a sua conclusão.
então eu conto as remessas que ja estão concluidas "P" e preciso fazer com que todos os andamentos dessa remessa sejam gravados na tabela andamento concluidos.... ex. tenho 5 remessas a 1, 2 ,3 ,4 , 5 a remessa nº 5 tem 6 andamentos.... tenho que inserir todos na tabela andamento concluido.... ps: como eu faço pra na consulta o resultado ser inserido em varias arrays ex:SELECT INTO XANDID[],XANDCDREMESSA2[],XANDDTANDAMENTO[].... and_id,and_cd_remessa,and_dt_andamento FROM tb_andamentoremessa.... se não der pra entender ainda me avisa que eu tento explicar melhor.... Obrigado Anderson 2009/2/9 Osvaldo Kussama <[email protected]> > 2009/2/9 Anderson <[email protected]>: > > pessoal fiz como vcs falaram, mas agora está dando outro erro, tentei > achar > > no manual mas não obtive resultados....minha esperiencia em procedure é > bem > > limitada, só fiz procedures mais basicas e essa ta me deixando de cabelos > > brancos....hehehehe. > > > > > > CREATE OR REPLACE FUNCTION "public"."sp_atualiza_andamento" (integer) > > RETURNS integer AS > > $body$ > > /* Corpo da nova função */ > > DECLARE > > XIDUSU ALIAS FOR $1; > > XCONTA integer; > > XANDID integer; > > XANDCDREMESSA integer[]; > > XANDDTANDAMENTO varchar; > > XANDCDUSUARIO integer; > > XANDCDUNIDADE integer; > > XANDCDROMANEIO integer; > > XANDLOCALIZAÇÃO varchar; > > XARRAY integer; > > XCONTAIDREMESSA integer; > > XANDCDREMESSAA integer[]; > > XCONTA2 integer; > > BEGIN > > > > --BUSCA QUANTO REGISTROS TEREI NO BANCO. > > SELECT INTO XCONTA count(and_id) FROM tb_andamentoremessa WHERE > > and_localizacao='P'; > > XCONTA2 :=XCONTA; > > --LOOP PARA ARMAZENAR NA ARRAY XANDREMESSA O NUMERO DAS REMESSAS DE > ACORDO > > COM A QUANTIDADE DE REGISTROS > > FOR I IN 1..XCONTA LOOP > > > > SELECT INTO XANDCDREMESSA and_cd_remessa FROM tb_andamentoremessa > WHERE > > and_localizacao='P'; > > Não consegui entender o que você está tentando fazer aqui. > > > > > > END LOOP; > > > > --LOOP PARA BUSCAR NA TABELA ANDAMENTOREMESSA OS REGISTROS PARA SEREM > > INSERIDOS NA TABELA ANDAMENTO CONCLUIDO > > FOR I IN 1..XCONTA2 LOOP > > --SELECT BUSCANDO OS REGISTROS DE ACORDO COM OS NUMEROS DAS > REMESSAS > > QUE ESTÃO ARMAZENADOS NA ARRAY XANDCDREMESSA > > SELECT INTO > > > XCONTAIDREMESSA,XANDID,XANDCDREMESSAA,XANDDTANDAMENTO,XANDCDUSUARIO,XANDCDUNIDADE,XANDCDROMANEIO,XANDLOCALIZAÇÃO > > > count(and_cd_remessa),and_id,and_cd_remessa,and_dt_andamento,and_cd_usuario,usu_cd_unidade,and_cd_romaneio,and_localizacao > > FROM tb_andamentoremessa WHERE and_cd_remessa=XANDCDREMESSA[I] GROUP BY > > > and_id,and_cd_remessa,and_dt_andamento,and_cd_usuario,usu_cd_unidade,and_cd_romaneio,and_localizacao > > ORDER BY and_id ASC; > > > > XARRAY := array_upper(XANDCDREMESSAA,1); > > > > --LOOP PARA INSERIR NA TABELA ANDAMENTO CONCLUIDO OS > > REGISTROS DA TABELA ANDAMENTO REMESSA E UM DELETE NA TABELA ANDAMENTO > > REMESSA > > > > FOR I IN 1..XARRAY LOOP > > --INSERT NA TABELA ANDAMENTO CONCLUIDO > > INSERT INTO tb_andamentoconcluido (and_id, > > and_cd_remessa, > > and_dt_andamento, > > and_cd_usuario, > > usu_cd_unidade, > > and_cd_romaneio, > > and_localizacao > > )VALUES( > > XANDID, > > XANDCDREMESSA, > > > > quote_literal(XANDDTANDAMENTO), > > XANDCDUSUARIO, > > XANDCDUNIDADE, > > XANDCDROMANEIO, > > > > quote_literal(XANDLOCALIZAÇÃO) > > ); > > --DELETA OS REGISTROS DA TABELA ANDAMENTO REMESSA > > DELETE FROM tb_andamentoremessa WHERE > > and_cd_remessa=XANDCDREMESSAA[I]; > > > > END LOOP; > > END LOOP; > > > > > > RETURN XCONTA; > > END; > > $body$ > > LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; > > > > > > O erro que esta retornando é este: > > > > ERROR: array value must start with "{" or dimension information > > CONTEXT: PL/pgSQL function "sp_atualiza_andamento" line 24 at SQL > statement > > > > > > se alguem puder me ajudar eu fico muito agradecido.... > > caso seja muito complicado, se vcs me diserem o que devo procurar no > manual > > eu me viro aqui... tipo procura por ARRAY ou por array_upper..... > > > > > > Tente substituir este trecho: > --BUSCA QUANTO REGISTROS TEREI NO BANCO. > SELECT INTO XCONTA count(and_id) FROM tb_andamentoremessa WHERE > and_localizacao='P'; > XCONTA2 :=XCONTA; > --LOOP PARA ARMAZENAR NA ARRAY XANDREMESSA O NUMERO DAS REMESSAS DE > ACORDO COM A QUANTIDADE DE REGISTROS > > FOR I IN 1..XCONTA LOOP > > SELECT INTO XANDCDREMESSA and_cd_remessa FROM tb_andamentoremessa > WHERE and_localizacao='P'; > > END LOOP; > > por: > > XANDCDREMESSA := ARRAY(SELECT and_cd_remessa FROM tb_andamentoremessa > WHERE and_localizacao='P'); > XCONTA := array_upper(XANDCDREMESSA); > > Osvaldo > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
