这是我的第一个问题。
这是我第一次需要对Oracle表中包含的所有数字值进行运算。
我从经典的“ SELECT * FROM ... WHERE ...”开始(我有147列),我想四舍五入在行/列中找到的所有小数。
有没有办法做到这一点?
谢谢!
您可以如下使用动态查询:
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;
/
您可以像下面这样构建您的查询
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'