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

DB2通过客户端和CLI的行为不同,db2,command-line-interface,squirrel-sql,Db2,Command Line Interface,Squirrel Sql,这个问题我已经面对过好几次了。所以我感兴趣的是,为什么DB2在执行来自Squirrel和CLI的相同命令时表现不同。我正在使用Windows10和DB2LUW9.7版 我面临的这个特殊问题是时间戳格式: 当我从Squirrel(但不是从CLI)运行此插件时,此插件可以工作: INSERT INTO TABLE_A(CREATION_TIME) VALUES ({ts '2018-04-16 17:03:22.066000'}) 我使用“复制为SQL insert-VALUES语句”从Squir

这个问题我已经面对过好几次了。所以我感兴趣的是,为什么DB2在执行来自Squirrel和CLI的相同命令时表现不同。我正在使用Windows10和DB2LUW9.7版

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

当我从Squirrel(但不是从CLI)运行此插件时,此插件可以工作:

INSERT INTO TABLE_A(CREATION_TIME) VALUES ({ts '2018-04-16 17:03:22.066000'})
我使用“复制为SQL insert-VALUES语句”从Squirrel生成了insert语句。coltype是TIMESTAMP

总的来说,还有其他不同之处。例如语句 REORG TABLE_A仅从CLI工作,而不从Squirrel工作


有人能告诉我这种不同的行为是从哪里来的吗?是否有一些文档可以帮助我理解这种现象?

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

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

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

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

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

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

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

但是,可以使用存储过程SYSPROC.ADMIN\u CMD通过jdbc间接运行REORG

您可以查看文档和示例

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

如果希望在命令行上查看格式:在连接到数据库时使用
db2 values current timestamp
db2 values current date
db2 values current time


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

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

但是,可以使用存储过程SYSPROC.ADMIN\u CMD通过jdbc间接运行REORG

您可以查看文档和示例

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

如果希望在命令行上查看格式:在连接到数据库时使用
db2 values current timestamp
db2 values current date
db2 values current time


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

我认为文档至少在某种程度上解释了上下文。虽然它没有(向我)解释为什么REORG或这种看起来很奇怪的时间戳格式不起作用,但我认为文档至少在某种程度上解释了上下文。虽然它没有(向我)解释为什么REORG或这种奇怪的时间戳格式不起作用。出于兴趣,这是说“IBM®Data Server Driver for JDBC and SQLJ支持SQL escape语法,如JDBC 1.0规范中所述”的页面出于兴趣,这是说用于JDBC和SQLJ的IBM®数据服务器驱动程序支持SQL转义语法,如JDBC 1.0规范中所述