Oracle-四舍五入所有列中的所有数值

问题描述 投票:0回答:2

这是我的第一个问题。

这是我第一次需要对Oracle表中包含的所有数字值进行运算。

我从经典的“ SELECT * FROM ... WHERE ...”开始(我有147列),我想四舍五入在行/列中找到的所有小数。

有没有办法做到这一点?

谢谢!

oracle rounding
2个回答
0
投票

您可以如下使用动态查询

BEGIN
    FOR ALL_COLS IN (
        SELECT TABLE_NAME,
               COLUMN_NAME
          FROM USER_TAB_COLUMNS
         WHERE TABLE_NAME = '<YOUR_TABLE_NAME>' AND DATA_TYPE = 'NUMBER'
    ) LOOP
        EXECUTE IMMEDIATE 'UPDATE ' || TABLE_NAME
                       || ' SET ' || COLUMN_NAME || ' = ROUND(' || COLUMN_NAME || ') '
                       || ' WHERE ' || COLUMN_NAME || ' <> ROUND(' || COLUMN_NAME || ')';
    END LOOP;
COMMIT;
END;
/

0
投票

您可以像下面这样构建您的查询

 select 'SELECT '||
 listagg(decode(data_type,'NUMBER','ROUND('||column_name||')',column_name),',') within group 
 (order by column_id)
||' FROM '||'TABLE_NAME'
 from user_tab_Cols where table_name='TABLE_NAME'
© www.soinside.com 2019 - 2024. All rights reserved.