não é bem isso......fiz a procedure mas ta dando erro, não manjo muito de
procedures, tentei achar no manual mas não entendi como utilizar as funç
ões, tentei achar na lista mas daqui do meu trampo não consegui acessar....
então recorro aos amigos para me ajudarem....
procedure:
CREATE OR REPLACE FUNCTION "public"."sp_gera_gestao" (integer, integer,
integer, integer, varchar) RETURNS integer AS
$body$
/* Corpo da nova função */
DECLARE
XQUANTGESTAO ALIAS FOR $1;
XIDSETOR ALIAS FOR $2;
XIDUSUARIO ALIAS FOR $3;
XANO ALIAS FOR $4;
XSUFIXO ALIAS FOR $5;
--VARIAVEL QUE VAI RECEBER O NUMERO DE REGISTROS
XRECEBENUMEROGESTAO integer[];
-- VARIAVEIS PARA A CRIAÇÃO DAS TABELAS QUE SOFRERÃO ALTERAÇÕES//
XTBNOME text;
XTBID text;
XTBANO text;
XTBUSUARIO text;
XTBSETOR text;
--VARIAEIS PARA EXECUÇÃO
XINSERT text;
CONTA integer;
BEGIN
--MONTA O NOME DAS TABELAS DE ACORDO COM O SUFIXO DA UNIDADE
XTBNOME := 'tb_remessagestao'||XSUFIXO;
XTBID := 'ges'||XSUFIXO||'_id_remessa';
XTBANO := 'ges'||XSUFIXO||'_ano';
XTBUSUARIO := 'ges'||XSUFIXO||'_id_usuario';
XTBSETOR := 'ges'||XSUFIXO||'_id_setor';
CONTA := 0;
WHILE (CONTA < XQUANTGESTAO) LOOP
--INSERE NO BANCO O ID DO USUARIO, SETOR E ANO
XINSERT := 'INSERT INTO '||XTBNOME||'('||
XTBANO||','||
XTBUSUARIO||','||
XTBSETOR||'
)VALUES('||
XANO||','||
XIDUSUARIO||','||
XIDSETOR||')';
EXECUTE XINSERT;
--FAZ CONSULTA NA TABELA QUE ACABOU DE RECEBER O REGISTRO E ARMAZENA EM UMA
ARRAY
XRECEBENUMEROGESTAO := 'SELECT max('||XTBID||') FROM '||XTBNOME;
RAISE NOTICE 'VALOR %',XRECEBENUMEROGESTAO;
CONTA := CONTA+1;
END LOOP;
RETURN 1;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
*ERRO QUE RETORNA AO EXECUTAR A PROCEDURE.*
*ERROR: array value must start with "{" or dimension information
CONTEXT: PL/pgSQL function "sp_gera_gestao" line 45 at assignment
*
se alguem puder me ajudar a resolver isso, ou dizer qual a função que eu
deve pesquisar eu fico agradecido.
Sem Mais
Anderson.
2009/4/22 Fabrízio de Royes Mello <[email protected]>
>
>
> 2009/4/22 Anderson <[email protected]>
>
>> Boa Tarde pessoal,
>>
>> seguinte estou montando um procedure e preciso que o resultado do select
>> seja armazenado em uma array.esta procedure é para pegar um determinado
>> numero de ids, de acordo com a quantia que o usuario desejar.
>> A logica que estou usando é assim:
>>
>> o usuario digita que quer 10 numeros de ids,
>> faço um for até o limite de 10, dentro do for eu farei um insert e em
>> seguida pegarei o ultimo gravado e armazeno na array,
>>
>>
> Anderson,
>
> Olha que legal:
>
> teste=# CREATE AGGREGATE array_accum (anyelement)
> teste-# (
> teste(# sfunc = array_append,
> teste(# stype = anyarray,
> teste(# initcond = '{}'
> teste(# );
> CREATE AGGREGATE
>
>
> teste=# SELECT array_accum(CAST(random()*100 as integer)) FROM
> generate_series(1, 10) as id;
> array_accum
> ---------------------------------
> {60,57,13,22,55,46,59,79,96,37}
> (1 row)
>
>
>
> Com um SELECT gerei os teus 10 ids de forma aleatória com valores entre 0 e
> 100.
>
> Referências:
> http://www.postgresql.org/docs/8.3/interactive/xaggr.html
> http://www.postgresql.org/docs/8.3/interactive/functions-math.html
>
>
> Cordialmente,
>
> --
> Fabrízio de Royes Mello
> >> Blog sobre PostgreSQL: http://fabriziomello.blogspot.com
>
> _______________________________________________
> 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