Запрос SQL для усечения таблицы в IBM DB2 - PullRequest
6 голосов
/ 09 июня 2010

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

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

Ошибка - DB2

SQLCODE = -104, SQLSTATE = 42601, SQLERRMC = таблица; усечение; JOIN, DRIVER = 3.50.152 Сообщение: неожиданный токен "таблица" был найден после "усечения". Ожидаемые токены могут включать в себя: «JOIN». 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

Ответы [ 6 ]

12 голосов
/ 09 июня 2010

Есть отличная статья о усечении , здесь суть вещей DB2

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

TRUNCATE TABLE someschema.sometable IMMEDIATE 

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

В Unix-подобных системах: ИМПОРТ ИЗ / dev / null OF DEL ЗАМЕНИТЬ НА имя таблицы В Windows: ИМПОРТ ИЗ NUL OF DEL ЗАМЕНИТЕ В tablename ИМПОРТ нельзя злоупотреблять во всех контекстах. Например, при работе с динамическим SQL (из Java / .NET / PHP /... - без использования процессора командной строки db2) необходимо заключить команду IMPORT в вызов ADMIN_CMD, например ::

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

ИМПОРТ, по-видимому, разрешен в транзакции, связанной с другими операциями, однако это подразумевает немедленную операцию COMMIT.

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

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

2 голосов
/ 19 марта 2013

Если вы используете DB2 для AS400, IMMEDIATE TRUNCATE TABLE НЕ будет работать.Эквивалентный обходной путь заключается в следующем:

DELETE FROM [tableName] , затем, если это эквивалентный столбец с автоинкрементом, выполните: ALTER TABLE ALTER COLUMN RESTART WITH 1

ИЛИ более быстрый (самый эффективный способ)

Передать команду системе для очистки физического файла

Синтаксис Java:

CommandCall command = new CommandCall(new AS400(AS400SystemName, AS400JavaUser, AS400JavaPwd));
try {
    command.run("CLRPFM FILE(as400SchemaName/" + tableName + ")");
1 голос
/ 09 июня 2010

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

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

0 голосов
/ 18 декабря 2014

DB2 в z / OS V10 Пустая одна из ваших таблиц: усеченная таблица;с последующей фиксацией работы.Ex.усечь темп;Чужая таблица: truncate owner.table Пример: truncate student.work;Я не пробовал это на связанной DB2.Я не знаю, если усечь узел2.student.work;это хорошо.

SQL для автоматического создания списка таблиц.Подстрока (substr) используется, потому что ширина столбца для имени таблицы и создателя слишком длинная.Ваши ценности могут быть разными.

select 'truncate table '||substr(creator,1,9)||'.'||substr(name,1,20)  
    from sysibm.systables
        where creator = 'Student';
0 голосов
/ 17 мая 2011

Это точная справочная документация, доступная для TRUNCATE в DB2 от версии 9.7

Справочник по DB2 для TRUNCATE

0 голосов
/ 09 ноября 2010

использовать усечь 'имя_ таблицы' немедленно

...