Oracle - округлить все числовые значения c во всех столбцах - PullRequest
0 голосов
/ 04 мая 2020

это мой первый вопрос.

В первый раз мне нужно округлить ВСЕ ЧИСЛА C ЗНАЧЕНИЙ, содержащихся в таблице Oracle.

Я начинаю с класса c "ВЫБРАТЬ * ОТ ... ГДЕ ..." (у меня есть 147 столбцов), и я хотел бы округлить все десятичные дроби, которые я нахожу в своих строках / столбцах.

Есть ли способ сделать это ?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 05 мая 2020

Вы можете построить свой запрос, как показано ниже

    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' 
0 голосов
/ 11 мая 2020

спасибо за все ваши ответы ...

наконец, я сделал al oop для всех своих столбцов и переписал запрос: пользователь вставил "SELECT ", и я заменил "" со всеми именами столбцов (и КРУГЛЫМ на цифрах).

Это не самое быстрое решение, но оно работает ...

0 голосов
/ 04 мая 2020

Вы можете использовать динамический c запрос следующим образом:

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;
/
...