2010-06-09 79 views
4

任何人都可以給我語法來截斷IBM DB2中的表。SQL查詢截斷IBM DB2中的表

我米運行下面的命令:truncate table tableName immediate;

的eror是DB2

SQLCODE = -104,SQLSTATE = 42601,則sq​​lerrmc =表;截形; JOIN,DRIVER = 3.50.152 消息:在「truncate」之後找到意外的令牌「表」。預期標記可能包括: 「加入」 .. 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

+0

您運行的是哪個版本的DB2? – 2010-06-09 15:24:25

回答

9

有一大篇關於truncating,這裏是DB2東西主旨

幾乎遵循標準。(從版本9.7) DB2要求立即關鍵字添加的普通TRUNCATE TABLE語句,如:

TRUNCATE TABLE someschema.sometable IMMEDIATE 

TRUNCATE TABLE必須是事務中的第一條語句。以TRUNCATE TABLE開頭的事務可能包含其他語句,但如果事務回滾,則TRUNCATE TABLE操作不會被撤消。 DB2 TRUNCATE TABLE操作具有許多可選參數,有關詳細信息,請參閱文檔;尤其是,REUSE STORAGE參數對於臨時DBA任務可能很重要。 在DB2版本< 9.7中,您可能會濫用IMPORT語句。不幸的是,你需要知道哪些操作系統的命令是從這個工作中執行:

在類Unix系統: IMPORT從/ dev/null的德爾REPLACE INTO表名 在Windows上: IMPORT從NUL DEL REPLACE INTO表名 IMPORT不能在所有情況下被濫用。例如,使用動態SQL時(從Java/.NET/PHP /...-不使用DB2命令行處理器),您需ADMIN_CMD調用包裹IMPORT命令,如:

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

+0

Thx。從/ dev/null的DEL更換到表名做了訣竅 – Cshah 2010-06-10 07:26:51

1

哪個版本您正在使用DB2嗎? DB2 v9中引入了truncate table命令(至少在大型機上,這似乎是基於鏈接提出的問題)。

雖然this article給出了在DB2 v8中執行存儲過程的方法,但您可能不得不求助於delete from選項。

0

使用截斷 '表名' 立即

2

如果您正在使用DB2 for AS400,那麼IMMEDIATE TRUNCATE TABLE將不起作用。該equivallent解決辦法是要麼:

  • DELETE FROM [表名]
  • 那麼,如果它是一個自動遞增equivalant列,運行:
  • ALTER TABLE ALTER COLUMN RESTART 1
  • 或更快(最有效的方式)

  • 傳遞一個命令系統來清除物理文件
  • Java語法:

    CommandCall command = new CommandCall(new AS400(AS400SystemName, AS400JavaUser, AS400JavaPwd)); 
    try { 
        command.run("CLRPFM FILE(as400SchemaName/" + tableName + ")"); 
    
    +0

    事實證明,有一種方法可以真正做TRUNCATE TABLE的等價物,而不僅僅是刪除所有的行。命令語法根本不直觀:http://stackoverflow.com/a/3616556/95852 – 2014-04-14 16:21:32

    0

    z/OS V10上的DB2 空表之一:truncate table;其次是提交工作。防爆。截斷溫度 其他人表格:truncate owner.table例如:truncate student.work; 我還沒有在鏈接的DB2上試過這個。我不知道是否truncate node2.student.work;很好。

    用於自動創建表列表的SQL。使用Substring(substr),因爲表名和創建者的列寬非常長。你的價值可能不同。

    select 'truncate table '||substr(creator,1,9)||'.'||substr(name,1,20) 
        from sysibm.systables 
         where creator = 'Student';