DB2 通过客户端和 CLI 的行为不同



我遇到过这个问题几次。所以我很想知道为什么 DB2 在执行来自 Squirrel 和 CLI 的相同命令时行为不同。我正在使用 Windows 10 和 DB2 LUW 版本 9.7

我面临的这个特殊问题是时间戳格式:

当我从松鼠运行它但不能从 CLI 运行时,此插入有效:

INSERT INTO TABLE_A(CREATION_TIME) VALUES ({ts '2018-04-16 17:03:22.066000'})

我已经使用"复制为 SQL INSERT-VALUES 语句"从 Squirrel 生成了插入语句。并列类型是时间戳。

一般来说,还有其他差异。例如语句 重组表TABLE_A仅适用于 CLI,而不适用于松鼠。

有人可以启发我这种不同的行为从何而来,是否有一些文档可以帮助我理解现象?

REORG TABLE 在命令行中工作而不在 Squirrel (jdbc) 中工作的原因是 REORG TABLE不是SQL。 jdbc 应用程序运行 SQL,它们不直接运行 Db2 命令。

但是,可以使用存储过程 SYSPROC 通过 jdbc 间接运行 REORG。ADMIN_CMD。

您可以在此处查看文档和示例。

对于时间戳和日期文本值,命令行(bash/ksh/db2cmd.exe/或交互式 CLP)都接受有效的时间戳文本。 命令行的时间戳文本如下所示 '2018-04-20-11.18.14.695148'

如果要在命令行上查看格式:在连接到数据库时使用db2 values current timestampdb2 values current datedb2 values current time

命令行编程(脚本)适合管理员,因为您可以在同一脚本中自由混合使用 Db2 命令和 SQL。您不能直接在 Java 中执行此操作,而只能通过存储过程间接执行此操作。

表达式{ts '2018-04-16 17:03:22.066000'}不是有效的 SQL。但它是 JDBC 驱动程序的有效转义序列。这就是为什么它可以在SQuirrel(使用JDBC)中工作,但在本机客户端中不起作用。

编写时间戳的一种可移植的、不依赖于接口的方式是:

timestamp '2018-04-16 17:03:22.066000'

最新更新