Olá a todos,

Eu estou tentando fazer procedure que funciona assim:
Eu passo por parâmetro o schema, ele varre a tabela de tabelas do
postgres, escreve uma lista tabelas, pk, e o nome das sequencias.
Apartir daí eu faço uma seleção com MAX para descobrir a chave pk com
maior valor, aih seto o valor na minha sequencia. A idéia é que daí eu
posso atualizar o sequencia de um schema inteiro.
Depois que fizer funcionar vou fazer varrer a tabela de sequences, vai
trazer um nome mais confiável... mas se eu fizer funcionar assim por
enquanto já resolve meu problema.

problema numero 1:
EXECUTE 'SELECT max('||pk||') INTO'|| seq ||' FROM '|| tabela;
Retorna o seguinte erro: ERROR: cannot EXECUTE a null querystring

A "tabela" é uma variável e "pk" também, será que tem outro jeito de
fazer essa consulta usando essas variáveis no FROM? e no max?

problema numero 2:
Não está funcionando esse Fetch, eu não consigo fazer ele avançar...
o q está errado nele?

Qualquer idéia aí já ajuda! abraço

CREATE OR REPLACE FUNCTION public.last_seq(schema_sequence varchar)
RETURNS void AS
$body$
DECLARE
        sequencias CURSOR FOR SELECT schemaname||
'.'||tablename||'_id_'||tablename||'_seq' as sequencias, schemaname||
'.'||tablename as tabela, 'id_'||tablename as pk FROM pg_tables WHERE
schemaname = schema_sequence ORDER BY 1;
        nome_sequencia regclass;
        tabela varchar;
        pk varchar;
        seq bigint;
BEGIN
        OPEN sequencias;
        FETCH sequencias INTO nome_sequencia, tabela, pk;
        WHILE FOUND LOOP
                EXECUTE 'SELECT max('||pk||') INTO'|| seq ||' FROM '|| tabela;
                SELECT setval(nome_sequencia, seq);
                --FETCH FORWARD 1 FROM sequencias;
                --FETCH sequencias INTO nome_sequencia, tabela, pk;
                FETCH NEXT FROM sequencias INTO nome_sequencia, tabela, pk;
        END LOOP;
        CLOSE sequencias;
END
$body$
LANGUAGE 'plpgsql';
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a