SQL-запрос для усечения таблицы в IBM DB2

Может любой давать мне синтаксис для усечения таблицы в IBM DB2.

Я выполняю следующую команду: truncate table tableName immediate;

Ошибка является DB2

SQLCODE =-104, SQLSTATE=42601, SQLERRMC=table; усеченный; СОЕДИНЕНИЕ, сообщение DRIVER=3.50.152: неожиданная маркерная "таблица" была найдена следующей "усеченный". Ожидаемые маркеры могут включать: "СОЕДИНЕНИЕ".. SQLCODE =-104, SQLSTATE=42601, DRIVER=3.50.152

Синтаксис соответствует тому, указанному в справочных документах IBM: http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.sqlref/db2z_sql_truncate.htm

7
задан TheGameiswar 29 June 2016 в 08:44
поделиться

2 ответа

Есть отличная статья про усечение, вот Gist of DB2 stuff

Почти следует стандарту. (с версии 9.7) DB2 требует, чтобы в обычный оператор TRUNCATE TABLE было добавлено ключевое слово IMMEDIATE, например:

TRUNCATE TABLE someschema.sometable IMMEDIATE 

TRUNCATE TABLE должен быть первым оператором в транзакции. Транзакция, начинающаяся с TRUNCATE TABLE, может включать другие операторы, но если транзакция откатывается, операция TRUNCATE TABLE не отменяется. Операция TRUNCATE TABLE в DB2 имеет ряд необязательных аргументов, подробнее об этом см. в документации; особенно аргумент REUSE STORAGE может быть важен для специальных задач DBA. В версиях DB2 < 9.7 вы можете злоупотреблять оператором IMPORT. К сожалению, для этого необходимо знать, из какой операционной системы выполняется команда:

В unix-подобных системах: IMPORT FROM /dev/null OF DEL REPLACE INTO tablename В Windows: IMPORT FROM NUL OF DEL REPLACE INTO tablename IMPORT нельзя злоупотреблять во всех контекстах. Например, при работе с динамическим SQL (из Java/.NET/PHP/...- не используя процессор командной строки db2), необходимо обернуть команду IMPORT в вызов ADMIN_CMD, например:

CALL ADMIN_CMD('IMPORT FROM /dev/null OF DEL REPLACE INTO tablename')

IMPORT вроде бы разрешен в транзакции, включающей другие операции, однако он подразумевает немедленную операцию COMMIT.

Командой ALTER TABLE также можно злоупотреблять для быстрого очищения таблицы, но для этого требуется больше привилегий, и могут возникнуть проблемы с восстановлением при откате.

Это взято с сайта: http://troels.arvin.dk/db/rdbms/#bulk-truncate_table-db2

12
ответ дан 6 December 2019 в 14:00
поделиться

Какую версию DB2 вы используете? Команда truncate table появилась в DB2 v9 (по крайней мере, на мэйнфрейме, о котором, судя по ссылке, вы спрашиваете).

Возможно, вам придется прибегнуть к опции delete from, хотя в этой статье приводится способ выполнения хранимой процедуры в DB2 v8.

1
ответ дан 6 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: