DB2通过客户端和CLI以不同的方式运行

时间:2018-04-20 10:08:28

标签: db2 command-line-interface squirrel-sql

我几次遇到这个问题。所以我很感兴趣的是,为什么DB2在从Squirrel和CLI执行相同的命令时表现不同。我正在使用Windows 10和DB2 LUW版本9.7

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

当我从Squirrel运行它而不是从CLI运行时,此插入有效:

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

我使用“Copy as SQL INSERT-VALUES statement”从Squirrel生成了insert语句。 coltype是TIMESTAMP。

一般来说,还有其他差异。例如声明 REORG TABLE TABLE_A仅适用于CLI,但不适用于Squirrel。

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

2 个答案:

答案 0 :(得分:1)

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

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

您可以查看文档和示例here

关于时间戳和日期文字值,命令行(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中直接执行 ,而只能通过存储过程间接执行此操作。

答案 1 :(得分:0)

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

编写时间戳的便携式非接口依赖方式是:

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