Можно ли выполнить запрос Teradata в Excel, который использует таблицы Volatile? - PullRequest
0 голосов
/ 22 мая 2019

Мой запрос Teradata создает переменную, которая используется для присоединения к существующим представлениям.При связывании запроса в excel появляется следующее сообщение об ошибке: «Teradata: [База данных Teradata] [3932] Только оператор ET или нулевой оператор допустим после оператора DDL».Есть ли обходной путь для этого для человека, у которого нет разрешения на запись в teradata для создания реального представления или таблицы?Я хочу избежать ссылок на Teradata в SQL и запуска открытого запроса для получения необходимых данных.

Это для 64-разрядной версии Excel 2016 и Teradata версии 15.10.1.12

1 Ответ

0 голосов
/ 22 мая 2019

Обычно эта ошибка возникает, если вы используете режим ANSI или выдавали BT (Begin Transaction) в режиме BTET.

Вот несколько вариантов решения проблемы:

  1. Выполните оператор ET; (commit) после оператора create volatile table.Если вы используете режим ANSI, используйте COMMIT; вместо ET;.Если вы не уверены, попробуйте каждый по очереди.Только один будет действительным, но оба будут делать то же самое.Убедитесь, что ваша таблица Volatile включает ON COMMIT PRESERVE ROWS
  2. Попробуйте использовать режим BT ET (он же режим Teradata) при создании сеанса.Я не помню, где, но в конфигурации ODBC для этого будет параметр.
  3. Попробуйте использовать глобальную временную таблицу.Они работают аналогично волатильным таблицам , за исключением , вы определяете их один раз, и определение остается неизменным.То есть вы можете создать его, скажем, в BTEQ, или в SQL помощнике и т. Д. Определение является общим для всех пользователей и сеансов (т. Е. Вашего сеанса Excel), но содержимое является временным и уникальным для каждого сеанса (например, изменяемая таблица).
  4. Переместите выбранную часть вставки в таблицу переменных в запрос, который выбирает данные из таблицы переменных.См. Простой пример ниже.

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

Вот простой пример, иллюстрирующий пункт 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.

Последнее решение (один выбор) позволяет избежать этой потенциальной проблемы.

...