2009/2/6 Anderson <[email protected]>:
> boa tarde pessoal,
>
> estou fazendo esta procedure para ser disparada por um trigger, mas está
> dando um erro na contrução da array, alguem poderia me ajudar a resolver
> este problema....
>
> 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;
> BEGIN
>
> SELECT into XCONTA,XANDCDREMESSA count(and_id),and_cd_remessa FROM
> tb_andamentoremessa WHERE and_localizacao='P' GROUP BY and_id,and_cd_remessa
> ORDER BY and_id ASC;
>
> FOR I IN 1..XCONTA LOOP
>
>       SELECT INTO
> XCONTAIDREMESSA,XANDID,XANDCDREMESSA,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;
>
>              FOR I IN 1..XCONTAIDREMESSA LOOP
>
>                  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)
>                                                     );
>
>                  DELETE FROM tb_andamentoremessa WHERE
> and_cd_remessa=XANDCDREMESSA;
>
>              END LOOP;
> END LOOP;
>
> RETURN XANDCDREMESSA;
> END;
> $body$
> LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
>
>
>
> erro retornado
> ERROR:  cannot subscript type integer because it is not an array
> CONTEXT:  SQL statement "SELECT
> 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_
>
>


Não lhe parece estranho este SELECT:

SELECT into XCONTA,XANDCDREMESSA count(and_id),and_cd_remessa
   FROM tb_andamentoremessa
 WHERE and_localizacao='P'
 GROUP BY and_id,and_cd_remessa
 ORDER BY and_id ASC;

Count(and_id) mas com and_id na cláusula GROUP BY?
Será sempre 1?

Osvaldo
PS. O erro é porque você está tratando como array um campo que não foi
definido como array.
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a