Обычно эта ошибка возникает, если вы используете режим ANSI или выдавали BT (Begin Transaction) в режиме BTET.
Вот несколько вариантов решения проблемы:
- Выполните оператор
ET;
(commit) после оператора create volatile table.Если вы используете режим ANSI, используйте COMMIT;
вместо ET;
.Если вы не уверены, попробуйте каждый по очереди.Только один будет действительным, но оба будут делать то же самое.Убедитесь, что ваша таблица Volatile включает ON COMMIT PRESERVE ROWS
- Попробуйте использовать режим BT ET (он же режим Teradata) при создании сеанса.Я не помню, где, но в конфигурации ODBC для этого будет параметр.
- Попробуйте использовать глобальную временную таблицу.Они работают аналогично волатильным таблицам , за исключением , вы определяете их один раз, и определение остается неизменным.То есть вы можете создать его, скажем, в BTEQ, или в SQL помощнике и т. Д. Определение является общим для всех пользователей и сеансов (т. Е. Вашего сеанса Excel), но содержимое является временным и уникальным для каждого сеанса (например, изменяемая таблица).
- Переместите выбранную часть вставки в таблицу переменных в запрос, который выбирает данные из таблицы переменных.См. Простой пример ниже.
Если у вас нет разрешения на создание глобальной временной таблицы, обратитесь к администратору базы данных.
Вот простой пример, иллюстрирующий пункт 4.
Текущий:
create volatile table tmp (id Integer)
ON COMMIT PRESERVE ROWS;
insert into tmp
select customer_number
from customer
where X = Y and yr = 2019
;
select a,b,c
from another_tbl A join TMP T ON
A.id = T.id
;
Становится:
select a,b,c
from another_tbl A join (
select customer_number
from customer
where X = Y and yr = 2019
) AS T
ON
A.id = T.id
;
Или еще лучше, просто присоединяйтесь к своим столам напрямую.
Примечание Первая последовательность (создать таблицу, вставить и выбрать) представляет собой серию из трех операторов.Это вернет 3 «набора результатов».Первые два будут счетчиками строк, последними будут фактические данные.Большинство программ (включая, я думаю, Excel) не могут обрабатывать множественные ответы из набора результатов.Это одна из причин, по которой сложно использовать Teradata Macros с такими клиентскими инструментами, как Excel.
Последнее решение (один выбор) позволяет избежать этой потенциальной проблемы.