Intereting Posts
Доступ к автоматическому приращению идентификационного поля после вставки SQL в Java Получите лучшие результаты для каждой группы (в Oracle) MySQL InnoDB блокирует только затронутые строки? mysql: выберите последние 10 сообщений и для каждого сообщения последние 3 ответа Выберите значения динамических строк как имена столбцов в определенном порядке Какая БД для больших баз данных? Как хранить более 255 символов в базе данных MySQL? Как сделать оповещение по электронной почте, как календарь Google? MySQL несколько условий IN для подзапроса с той же таблицей Синтаксис Android Sqlite IN, NOT IN MySQL: как группировать данные в час и получать последние часы Не удалось прочитать строку 0, col 9 из CursorWindow Количество столбцов в datatable на основе значений из другого столбца Использовать предложение OR в процессе запроса в NHibernate Средняя разница между двумя датами, сгруппированными по третьему полю?

Изменение типа столбца столбца от DECIMAL (9,0) до DECIMAL (15,0)

Не могли бы вы помочь мне в этом вопросе (я не нашел его в документации Teradata, которая, честно говоря, очень подавляющая): у моей таблицы была эта колонка -BAN DECIMAL (9,0) – и теперь я хочу ее изменить – BAN DECIMAL (15,0) COMPRESS 0.- Как я могу это сделать? Что означает ограничение COMPRESS 0. или любое другое значение? Надеюсь, это возможно, и мне не нужно создавать новую таблицу, а затем скопировать данные из старой таблицы. Таблица очень большая – когда я делаю COUNT (*) из этой таблицы, я получаю эту ошибку: 2616 числовое переполнение произошло во время вычисления

Синтаксическая диаграмма для ALTER TABLE, похоже, не поддерживает прямое изменение типа данных столбца. ( Документация SQL DDL Teradata ). COMPRESS 0 сжимает нули. Teradata поддерживает множество различных видов сжатия.

Числовое переполнение здесь, вероятно, означает, что вы превысили диапазон целого числа. Чтобы эта часть работала, просто попробуйте применить к более крупному типу данных. (Для этого вам не нужно изменять тип данных столбца).

 select cast(count(*) as bigint) from table_name; 

Вы задали три разных вопроса:

  1. Вы не можете изменить тип данных столбца от DECIMAL(9,0) до DECIMAL(15,0) . Лучше всего создать новый столбец (NEW_BAN), назначить значения из старого столбца, удалить старый столбец и переименовать NEW_BAN обратно в BAN).

  2. COMPRESS 0 не является ограничением. Это означает, что значения «нуля» сжимаются из таблицы, экономя дисковое пространство.

  3. Ваш COUNT(*) возвращает эту ошибку, потому что таблица содержит более 2 147 483 647 строк (максимальное значение INTEGER). Передайте результат как BIGINT (как показано Catcall).

И я согласен, документация может быть подавляющей. Но будьте терпеливы и сосредоточьтесь только на названиях SQL для вашей точной версии. Они действительно хорошо написаны.

Вы не можете использовать ALTER TABLE для изменения типа данных из DECIMAL(9,0) в DECIMAL(15,0) поскольку он пересекает границу байта, необходимую для хранения значений в таблице. Для Teradata 13.10 более подробное ALTER TABLE использования ALTER TABLE для изменения типов данных столбцов см. В руководстве Teradata для дополнительных страниц 61-65 для определения языка данных SQL .