Syntax IBM DB2中截断表的SQL查询

Syntax IBM DB2中截断表的SQL查询,syntax,db2,truncate,Syntax,Db2,Truncate,有谁能告诉我在IBMDB2中截断表的语法吗 我正在运行以下命令:truncate table name immediate eror是DB2 SQLCODE=-104,SQLSTATE=42601,SQLERRMC=table;截断连接,驱动程序=3.50.152 消息:在“truncate”之后发现意外标记“table”。预期的令牌可能包括:“加入”。。SQLCODE=-104,SQLSTATE=42601,DRIVER=3.50.152 语法与IBM参考文档中指定的语法相匹配:您使用的是哪个

有谁能告诉我在IBMDB2中截断表的语法吗

我正在运行以下命令:
truncate table name immediate

eror是DB2

SQLCODE=-104,SQLSTATE=42601,SQLERRMC=table;截断连接,驱动程序=3.50.152 消息:在“truncate”之后发现意外标记“table”。预期的令牌可能包括:“加入”。。SQLCODE=-104,SQLSTATE=42601,DRIVER=3.50.152


语法与IBM参考文档中指定的语法相匹配:

您使用的是哪个版本的DB2?
truncate table
命令是在DB2V9中引入的(至少在大型机上是这样,这似乎是基于链接的问题)


您可能不得不求助于
delete from
选项,尽管它提供了在DB2V8中执行此操作的存储过程方法。

有一篇很棒的文章,下面是DB2内容的要点

几乎符合标准。(自9.7版起) DB2要求将IMMEDIATE关键字添加到普通TRUNCATE TABLE语句中,例如:

TRUNCATE TABLE someschema.sometable IMMEDIATE 
TRUNCATE TABLE必须是事务中的第一条语句。以TRUNCATE TABLE开头的事务可能包含其他语句,但如果事务回滚,TRUNCATE TABLE操作不会撤消。 DB2s TRUNCATE表操作有许多可选参数,有关这方面的更多信息,请参阅文档;特别是,重用存储参数对于特殊DBA任务可能很重要。 在DB2版本<9.7中,可能会滥用IMPORT语句。不幸的是,您需要知道该命令是从哪个操作系统执行的,才能使其正常工作:

在类unix系统上: 从DEL REPLACE的/dev/null导入到tablename 在Windows上: 从DEL REPLACE的NUL导入到tablename 导入不能在所有上下文中被滥用。例如,在使用动态SQL时(从Java/.NET/PHP/..-不使用db2命令行处理器),需要将IMPORT命令包装在对ADMIN_CMD的调用中,例如:

CALL ADMIN_CMD('IMPORT FROM /dev/null OF DEL REPLACE INTO tablename')
在涉及其他操作的事务中似乎允许导入,但它意味着立即提交操作

ALTER TABLE命令也可能被滥用以快速清空表,但它需要更多权限,并且可能会导致前滚恢复出现问题

这是从网站上获取的:

使用truncate'table_name'immediate

这是从9.7版开始在DB2中用于truncate的精确参考文档


如果您使用DB2forAS400,立即截断表将不起作用。相应的解决办法是:

  • 从[tableName]
  • 中删除,如果它是一个自动递增的等价列,请运行:
  • ALTER TABLE ALTER COLUMN用1重新启动

    或者更快(最有效的方式)
  • 向系统传递命令以清除物理文件
  • Java语法:

    CommandCall command = new CommandCall(new AS400(AS400SystemName, AS400JavaUser, AS400JavaPwd));
    try {
        command.run("CLRPFM FILE(as400SchemaName/" + tableName + ")");
    
    z/OSV10上的DB2 清空其中一个表:截断表;然后是提交工作。例如,截断温度; 其他人表:truncate owner.table Ex:truncate student.work; 我还没有在链接的DB2上尝试过这一点。我不知道是否截断node2.student.work;这很好

    用于自动创建表列表的SQL。使用子字符串(substr),因为表名和创建者的列宽太长。你的价值观可能不同

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

    在Java中,确保它是事务中的第一条语句

    您正在运行哪个版本的DB2?Thx。从DEL REPLACE的/dev/null导入到tablename做了一些技巧。事实证明,有一种方法可以实际执行与截断表等效的操作,而不仅仅是删除所有行。命令语法一点也不直观:IBM最终决定将TRUNCATE语句添加到DB2fori,版本为。