Em Qua, 2010-05-05 às 19:04 -0300, Osvaldo Kussama escreveu:
> ATENÇÃO:
> Para evitar qualquer problema é melhor limitar a pesquisa de tabelas
> apenas nos seus SCHEMAS.
> 
> Osvaldo

Muito obrigado pela ajuda.

Abraço.


Antonio.





> 
> 
> 
> Em 5 de maio de 2010 18:49, Osvaldo Kussama
> <[email protected]> escreveu:
> > Em 5 de maio de 2010 17:38, Antonio Prado
> > <[email protected]> escreveu:
> >> Em Qua, 2010-05-05 às 17:24 -0300, Osvaldo Kussama escreveu:
> >>> Em 5 de maio de 2010 16:00, Antonio Prado
> >>> <[email protected]> escreveu:
> >>> > Tenho em minha base de dados registros do tipo decimal que possuem valor
> >>> > Nulo. O correto é que estes possuam valor Zero.
> >>> >
> >>> > É possível corrigir isto com única instrução ou terei que fazer uma para
> >>> > cada tabela?
> >>> >
> >>>
> >>>
> >>> Numa única instrução não é possível de acordo com o padrão SQL. Você
> >>> terá que fazer um UPDATE para cada tabela.
> >>>
> >>> O que você pode fazer é uma função que consulte o catálogo e monte
> >>> dinamicamente este UPDATE para cada tabela de seu banco.
> >>
> >> Pode me dar um exemplo de como eu faço isto?
> >>
> >>> Aproveite e altere suas tabelas especificando NOT NULL sempre que
> >>> necessário de acordo com seus requisitos.
> >>
> >> Sim.
> >>
> >
> >
> > Algo to tipo:
> >
> > CREATE FUNCTION sua_funcao() RETURNS void AS $$
> > DECLARE
> >   _rec_tab RECORD;
> >   _rec_col RECORD;
> > BEGIN
> >   FOR _rec_tab IN SELECT * FROM information_schema.tables WHERE
> > table_type = 'BASE TABLE' LOOP
> >      _cmd_upd := 'UPDATE ' || table_schema || '.' || table_name || ' SET ';
> >      _campos := '';
> >      _cond := '';
> >
> >      FOR _rec_col IN SELECT * FROM information_schema.columns WHERE
> > table_schema = ' || _rec_tab.table_schema || ' AND table_name = ' ||
> > _rec_tab.table_name || ' AND is_nullable = ''YES'' AND data_type =
> > ''numeric''' LOOP
> >         IF _campos <> '' THEN
> >            _campos := _campos || ', ';
> >            _cond := _cond || ' OR ';
> >          END IF;
> >          _campos := _campos || _rec_col.column_name || ' = coalesce('
> > || _rec_col.column_name || ',0)';
> >          _cond := _cond || _rec_col. column_name || ' IS NULL';
> >      END LOOP;
> >      IF _campos <> '' THEN
> >         RAISE NOTICE ' Tabela alterada: %.%', _rec_tab.table_schema,
> > _rec_tab.table_name;
> >         EXECUTE _cmd_upd || campos || ' WHERE ' || _cond || ';';
> >      END IF;
> >      RETURN;
> >   END LOOP;
> > END;
> > $$ LANGUAGE plpgsql;
> >
> > Osvaldo
> > PS: Não testada.
> >
> _______________________________________________
> 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