2009/2/10 Anderson <[email protected]>: > pessoal to quase resolvendo, só falta uma ultima coisa, inserir na > tb_andamentoconcluido, mas ta dando o seguinte erro INSERT in not allowed in > a nom-volatile function. > > segue a procedure.... > > > 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[]; > XCONTAANDREMESSA integer[]; > XANDCDREMESSA integer; > XANDDTANDAMENTO varchar; > XANDCDUSUARIO integer; > XANDCDUNIDADE integer; > XANDCDROMANEIO integer; > XANDLOCALIZACAO varchar(2); > XARRAY integer; > XCONTAIDREMESSA integer[]; > XANDCDREMESSAA integer[]; > XCONTA2 integer; > XINSERT text; > XDELETE text; > BEGIN > > XCONTAANDREMESSA := ARRAY(SELECT and_cd_remessa FROM tb_andamentoremessa > WHERE and_localizacao='P' ORDER BY and_cd_remessa ASC); > > XCONTA := array_upper(XCONTAANDREMESSA,1); > > --LOOP PARA BUSCAR NA TABELA ANDAMENTOREMESSA OS REGISTROS PARA SEREM > INSERIDOS NA TABELA ANDAMENTO CONCLUIDO > FOR I IN 1..XCONTA LOOP > > --SELECT BUSCANDO OS REGISTROS DE ACORDO COM OS NUMEROS DAS REMESSAS > QUE ESTÃO ARMAZENADOS NA ARRAY XANDCDREMESSA > XCONTAIDREMESSA:= ARRAY(SELECT and_cd_remessa FROM > tb_andamentoremessa WHERE and_cd_remessa=XCONTAANDREMESSA[I] ORDER BY > and_cd_remessa ASC); > > XCONTA2 := array_upper(XCONTAIDREMESSA,1); > --LOOP PARA INSERIR NA TABELA ANDAMENTO CONCLUIDO OS REGISTROS DA > TABELA ANDAMENTO REMESSA E UM DELETE NA TABELA ANDAMENTO REMESSA > > FOR J IN 1..XCONTA2 LOOP > > SELECT INTO > XANDCDREMESSA,XANDDTANDAMENTO,XANDCDUSUARIO,XANDCDUNIDADE,XANDCDROMANEIO,XANDLOCALIZACAO > and_cd_remessa,and_dt_andamento, > > and_cd_usuario,usu_cd_unidade,and_cd_romaneio,and_localizacao FROM > tb_andamentoremessa WHERE and_cd_remessa=XCONTAANDREMESSA[I]; > > RAISE NOTICE 'Aqui a quantidade é %', XANDCDREMESSA; > RAISE NOTICE 'Aqui a quantidade é %', XANDDTANDAMENTO; > RAISE NOTICE 'Aqui a quantidade é %', XANDCDUSUARIO; > RAISE NOTICE 'Aqui a quantidade é %', XANDCDUNIDADE; > RAISE NOTICE 'Aqui a quantidade é %', XANDCDROMANEIO; > RAISE NOTICE 'Aqui a quantidade é %', XANDLOCALIZACAO; > > --INSERT NA TABELA ANDAMENTO CONCLUIDO > XINSERT:= 'INSERT INTO > tb_andamentoconcluido(and_con_cd_remessa, > and_con_dt_andamento, > and_con_cd_usuario, > usu_con_cd_unidade, > and_con_cd_romaneio, > > and_con_localizacao)VALUES(' > ||XANDCDREMESSA||',' > ||XANDDTANDAMENTO||',' > ||XANDCDUSUARIO||',' > ||XANDCDUNIDADE||',' > ||XANDCDROMANEIO||',' > ||XANDLOCALIZACAO||');'; > EXECUTE XINSERT; > > --DELETA OS REGISTROS DA TABELA ANDAMENTO REMESSA > DELETE FROM tb_andamentoremessa WHERE > and_cd_remessa=XANDCDREMESSAA[I]; > > END LOOP; > END LOOP; > > > RETURN 1; > END; > $body$ > LANGUAGE 'plpgsql' STABLE CALLED ON NULL INPUT SECURITY INVOKER; >
Do manual: "STABLE indicates that the function cannot modify the database,..." http://www.postgresql.org/docs/current/interactive/sql-createfunction.html Osvaldo _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
