2017-02-21 17 views
0

Я могу уронить временную таблицу динамически с помощьюПредупреждение брошено в то время как динамически снижается временную таблицу в SAP HANA

EXEC 'DROP TABLE '||:schemaname||'.'||:tablename; 

где SchemaName и имя_таблицы получаются в качестве входных данных в порядке.

Проблема: Я получаю предупреждение о

Not recommended feature: DDL statement is used in Dynamic SQL (current dynamic_sql_ddl_error_level = 1) 

В связи с этим предупреждением, я получаю исключение в C#, когда я использую эту процедуру.

Не поддерживается ли DROP в динамическом SQL? Помогите мне справиться с этим либо из SAP HANA, либо, по крайней мере, пропустите это предупреждение из-за исключения в C#

ответ

1

Да, оно поддерживается, но вы все равно получаете предупреждение, так как считается, что использовать DDL в динамическом SQL. В принципе, вы хотите избежать внесения изменений схемы в свой SQL-скрипт. Для временных таблиц нет необходимости бросать их в любом случае.

Память может быть легко высвобождена через TRUNCATE TABLE, если это вызывает беспокойство.

Ваша C# программа, с другой стороны, должна научиться обрабатывать и различать ошибки и предупреждения. Сообщение, которое вы получили здесь, является предупреждением и не означает ошибки.

Если это не возможно для вас сделать, то вы все еще можете использовать кувалду подход к проблемам: отключить предупреждение путем установки параметра IndexServer sqlscript - dynamic_sql_ddl_error_level = 0

Это конечно не рекомендуется, так как вы можете пропустить другие предупреждения.

+0

Спасибо за ответ @Lars Br. Я не могу использовать TRUNCATE, потому что у меня есть инструкция create temp table в процедуре. IF EXISTS недоступен в SAP HANA. Поэтому я ранее использовал обработку исключений. Теперь я пробую другие возможности проверить и отбросить временную таблицу, если она уже существует. Итак, я вызываю процедуру table_exists_check с именем таблицы в качестве параметра и внутри этой процедуры, я динамически отбрасываю таблицу, используя команду EXEC. Поэтому здесь я хочу только DROP и НЕ TRUNCATE. Есть ли другие способы сбросить временную таблицу, отличную от команды EXEC? –

+1

Ну, вы можете подумать об удалении таблицы temp create и просто определить глобальную таблицу temp. Это экономит вас на отдыхе таблицы каждый раз, когда вы запускаете процедуру. Данные в нем исчезнут после завершения сеанса. В качестве альтернативы вы можете использовать локальную таблицу временного сеанса сеанса - это автоматически исчезает после завершения сеанса. –