Изучаю синтаксис СУБД Teradata. И недавно наткнулся на довольно интересный скрипт вариант написания скрипта - bteq (это что то типа оболочки для написания SQL-скриптов, которые можно выполнить на любой среде где стоит данная субд). Я решил написать скрипт, все вроде нормально (он работает). Но потом я решил усложнить немного задачу себе и написать скрипт, который будет выбирать данные из таблицы, у которого нет определенного поля. При выполнении данного скрипта - она падает с ошибкой. Отловить ошибку пытался через конструкция ERRORCODE и ACTIVITYCOUNT, но безуспешно. Может кто-нибудь сталкивался с данной ситуацией, как это можно обойти?
Sayonji: К примеру есть такая таблица People (ID, Name, Adress, Desc) и таблица PeopleNew (ID, Name, Adress, Description)
Я пишу такой скрипт:
INSERT INTO PeopleNew (ID, Name, Adress, Description) SELECT (ID, Name, Adress, Description) From People
.IF ERRORCODE <> 0 THEN .GOTO Exit
Понятно, что в People нет поля Description, но я хочу обойти ситуацию, чтобы INSERT не упал., а продолжал дальше выполнять код. ERRORCODE не отлавливает ошибку. И Exit, это метка в конце файла
Anton: не знаю на сколько Teradata реализует стандарты SQL, но для наполнения одной таблицы данными другой нужно только чтобы совпадало количество полей и их типы. Соответственно, если в принимающей таблице полей больше, можно при выборке из источника использовать какой-нибудь заполнитель:
insert into destination_table (field_one, field_two, field_three) select field_one, field_two, NULL from source_table;
Решил проблему следующим образом:
Написал скрипт, который сравнивает две таблицу (существующую и из которой собираюсь вставлять данные). Если структра разная, то ничего не делаю и перехожу на выход, если же она одинаковая, то вставляю данные.