【问题标题】:Create table if not exists in DB2如果 DB2 中不存在,则创建表
【发布时间】:2016-02-15 00:25:08
【问题描述】:

在 DB2 中,我们想要检查一个表是否存在,并根据我们想要创建的表。我在网上搜索,我总是找到相同的 anwser,但是当我想运行查询时,我总是收到错误。

begin 
   declare continue handler for sqlstate '42710' begin end; 
   execute immediate 'CREATE TABLE HTMLMONIDB.DLW_C(MSG_ID varchar(119) NOT NULL, DIRECTION varchar(8) NOT NULL, TO_PARTY_NAME varchar(60) NOT NULL, PRIMARY KEY CLUSTERED (MSG_ID ASC, DIRECTION ASC )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]'; 
end

我不断收到同样的错误。

java.security.PrivilegedActionException: java.sql.SQLSyntaxErrorException: [SQL0104] Token 'CREATE TABLE SHEMA.TABLENAME was not valid. Valid tokens: : <IDENTIFIER> <PLI_STRING>

不知道错误是什么意思,感谢任何帮助!

谢谢!

【问题讨论】:

  • 这真的正是您使用的 CREATE TABLE 语句吗?首先将其调整为正确的可执行代码。
  • DB2 没有用于检查表是否存在于CREATE TABLE 查询中的语法。请参阅此检查表是否存在(使用 jdbc)stackoverflow.com/a/2942795/1737819
  • @Spookiecookie 问题中显示的方法在 DB2 中运行良好。如果它不存在,它将创建一个表,但如果该表存在,它会失败并出现错误,并且continue handler 取代了该错误。问题在于创建表的语法。

标签: java sql db2


【解决方案1】:

问题在于您的创建表语法。

这似乎不像有效的 DB2 语法。相反,它看起来很像 SQL Server 语法。请查阅您的特定 DB2 版本的文档。

就调试这个问题而言,你应该先让create table 语句直接在SQL 客户端中工作,然后再尝试将其放入动态SQL 中。然后,您应该在尝试将复合 SQL 语句合并到 Java 中之前使其正常工作。

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2013-05-26
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    相关资源
    最近更新 更多