Oracle 如何使用SpringJDBCTemplate截断表?

Oracle 如何使用SpringJDBCTemplate截断表?,oracle,spring,truncate,jdbctemplate,Oracle,Spring,Truncate,Jdbctemplate,我正在尝试使用Spring截断一个表: jdbcTemplate.execute("TRUNCATE TABLE " + table); 获取错误信息: 原因:org.springframework.jdbc.badsqlgramarException: 语句回调;糟糕的SQL语法 [截断表结果_帐户]; 嵌套异常是 java.sql.SQLException:意外 标记:在语句中截断 [截断] 有什么想法吗?您确定要对其执行此命令的数据库支持TRUNCATE TABLE命令吗?因为听起来好像

我正在尝试使用Spring截断一个表:

jdbcTemplate.execute("TRUNCATE TABLE " + table);
获取错误信息:

原因:org.springframework.jdbc.badsqlgramarException: 语句回调;糟糕的SQL语法 [截断表结果_帐户]; 嵌套异常是 java.sql.SQLException:意外 标记:在语句中截断 [截断]


有什么想法吗?

您确定要对其执行此命令的数据库支持
TRUNCATE TABLE
命令吗?因为听起来好像不是


您可能希望查看嵌套异常和stacktrace的其余部分,以确定此消息的来源。

我发现SQLExceptions并不总是直接指向问题。我会尝试直接在数据库上运行truncate查询,看看它是否有效。(您很可能从数据库本身获得更好的调试信息。)这可能是外键约束冲突、需要级联丢弃调用等。

错误的根本原因是您的SQL语句对于您正在交谈的数据库无效。因为异常是一个SQLException(即不是来自Spring的异常),所以可以说RDBMS本质上是“我不知道”truncate TABLE FOO的意思

您需要阅读数据库系统手册以了解如何截断表。尽管许多主要数据库(至少是最新版本)似乎支持
truncate table
语句,但听起来您的可能不支持


虽然效率较低,但您也可以尝试查询
DELETE FROM FOO
,其中
FOO
是您的表名。

这里的问题是您不能在现有事务中执行任何DDL(如truncate)。原因是DDL执行自动提交,而不会与事务概念(即回滚)发生冲突因此,我将该方法设置为
不受支持的
,我做得很好。

这里数据库允许截断..JDBC模板或JDBC驱动程序不允许截断操作

是的,直接在数据库上运行时确实有效。??您如何将该方法设置为
不受支持的
?添加“@Transactional(传播=不受支持)“用你的方法