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
