Мне нужно добавить столбец, если он не существует в таблице Firebird. Согласно официальной документации Как добавить столбец, если его нет в таблице:
EXECUTE block as
BEGIN
if (not exists(
select 1 from RDB$RELATION_FIELDS rf
where rf.RDB$RELATION_NAME = 'TABLE_NAME' and rf.RDB$FIELD_NAME = 'COLUMN_NAME'))
then
execute statement 'ALTER TABLE TABLE_NAME ADD COLUMN_NAME DECIMAL(6,6);';
END
Этот код отлично работает при первом выполнении (если столбец не существует - он создается). Но когда этот код запускается во второй раз (когда столбец уже существует) - выдается ошибка:
Мой код JavaScript перехватывает эту ошибку, и программа прекращает выполнение. Что мне нужно: если столбец уже существует - просто игнорировать этот блок.
К вашему сведению, сайт firebirdfaq.org не является «официальной документацией».
Предоставьте минимальный воспроизводимый пример и укажите точную версию Firebird, которую вы используете.
Firebird версии 2.5
Я решил эту задачу по-другому: сначала — проверить, существует ли столбец:
SELECT RDB$FIELD_NAME AS FIELD_NAME
FROM RDB$RELATION_FIELDS
WHERE RDB$RELATION_NAME='my_table_name'
AND RDB$FIELD_NAME = 'my_field_name';
В результате я получаю массив. Если массив содержит FIELD_NAME - просто продолжайте выполнять другой код. Если массив пуст (что означает, что столбца my_field_name там нет) - я запускаю оператор ALTER
:
ALTER TABLE my_table_name ADD my_field_name DECIMAL(6,6);
Не забывайте, что идентификаторы без разделителей в системных таблицах пишутся в верхнем регистре.
Поймать ошибку и игнорировать ее. Это оператор WHEN в PSQL и оператор try-catch в JavaScript.