Как мне создать CAST в Informix для приведения LVARCHAR в TEXT? - PullRequest
1 голос
/ 07 июня 2011

Какую встроенную процедуру можно использовать для приведения данных типа LVARCHAR к данным типа TEXT?

Большой контекст: у меня есть таблица со столбцом, который был определен как LVARCHAR(4096). Теперь разработчик хочет изменить тип данных этого столбца на TEXT. В идеале это будет сделано с помощью:

ALTER TABLE foo MODIFY bar TEXT;

... но в таком случае на экран выводится следующая ошибка:

ALTER TABLE can not modify column (bar) type. Need a cast from the current type to the new type.

Я прочитал конструкцию CREATE CAST, но не могу думать, как на самом деле будет выглядеть правильная функция преобразования. Без функции Informix не позволит CREATE CAST работать. То есть, если я делаю, просто:

CREATE CAST (LVARCHAR AS TEXT)

... Informix говорит мне, что требуется функция приведения (что имеет смысл).

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

Осторожно, разработчики Informix: если вы случайно столкнулись с такой проблемой, , вы не сможете выйти из нее, используя только SQL или DDL .Позвольте мне повторить это.

Если у вас есть столбец VARCHAR или LVARCHAR, который необходимо перенести в столбец TEXT, и если вы не можете позволить себе потерять данные в этом столбце, нет способа сделать это в SQL или DDL .

Вместо этого вы должны написать программу, которая выполняет преобразование для вас внутри драйвера базы данных, в памяти.В моем случае я использовал изменяемые наборы результатов JDBC и скопировал столбец в новый столбец, позволяя драйверу JDBC выполнить преобразование, затем отбросил старый столбец и переименовал новый столбец обратно в старый столбец.Этот общий шаблон является единственным способом переноса существующих символьных данных в столбец TEXT.

1 голос
/ 18 октября 2011

@ Storm: Какую версию IDS / ODBC вы используете?AFAIK, IDS 9 или 10 не могут этого сделать без использования специального встроенного C на сервере (см. Сайт boulder), но вы никоим образом не можете сделать это напрямую через SQL.Функции, связанные с BLOB-объектами или около того.

Другой способ - использовать UNLOAD / LOAD.

В моем сценарии у нас много проблем: нет прав администратора на корпоративном сервере, поскольку мы являемся поставщиками услуг, мы можем использовать только базу данных,но не может изменить структуру.Мы не можем изменять поля TEXT, только запуская запросы.

...