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

Responder a