这是我的第一个问题。
我第一次需要对Oracle表中包含的所有数字值进行运算。
我从经典的“ SELECT * FROM ... WHERE ...”开始(我有147列),我想四舍五入在行/列中找到的所有小数。
有办法吗?
谢谢!
答案 0 :(得分: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;
/
答案 1 :(得分:0)
您可以像下面这样构建查询
SELECT 'SELECT '
|| Listagg(Decode(data_type, 'NUMBER', 'ROUND('
||column_name
||') '
|| column_name,
column_name), ',')
within GROUP (ORDER BY column_id)
||' FROM '
||'TABLE_NAME'
FROM user_tab_cols
WHERE table_name = 'TABLE_NAME'
答案 2 :(得分:0)
感谢您的所有回答...
最后,我对所有列进行了循环,并重新编写了查询:用户插入“ SELECT ”,然后将“ ”替换为所有列名(以及ROUND)在数字上)。
这不是“最快”的解决方案,但它可以起作用...