Informix и DROP COLUMN, если существует - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь написать сценарий SQL для повторного использования с предложением ADD COLUMN для сервера Informix. Обычно я могу запустить его только один раз, потому что тогда столбец уже существует и его нельзя добавить снова. И я не могу просто добавить DROP column как предыдущее утверждение, потому что оно не выполнится во время первого выполнения. Мне нужно что-то вроде DROP COLUMN ЕСЛИ СУЩЕСТВУЕТ, но, в отличие от удаления других SQL сущностей, оно не доступно для столбцов.

Я могу спросить системные таблицы, присутствует ли столбец в этой БД через:

SELECT c.colname
  FROM "informix".systables AS t
  JOIN "informix".syscolumns AS c ON t.tabid = c.tabid
 WHERE c.colname = 'col_name' and t.tabname = 'tab_name'

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

Есть какие-нибудь подсказки? Или это миссия невыполнима?

1 Ответ

0 голосов
/ 10 февраля 2020

При существующем положении оператор ALTER TABLE в Informix не имеет ни условия DROP COLUMN IF EXISTS, ни условия ADD COLUMN IF NOT EXISTS (ни отдельного оператора DROP COLUMN - хотя он и имеет отдельный оператор RENAME COLUMN).

Вы должны будете обернуть логи c, чтобы определить, существует ли столбец в сценарии оболочки, и на основании этого решить, добавлять ли столбец. Или, в качестве альтернативы, вам придется отправить операцию ADD и игнорировать ошибку «столбец уже существует».

...