我有两个groovy脚本,分别对一个Oracle表进行插入和更新,该表有一个字符串列和两个时间戳列,创建如下:
CREATE TABLE sn_token (
"token" varchar2(500 char) NOT NULL,
created_at timestamp NOT NULL,
updated_at timestamp,
PRIMARY KEY ("token")
);
在第一个groovy脚本中,我使用这个groovy代码段在此表上进行了插入(我省略了连接到数据库的代码段):
import java.util.Date;
import org.joda.time.DateTime;
DateTime now = DateTime.now()
Date date = now.toDate()
def createdTimestamp = date.toTimestamp()
def map = [token : "myToken", created_at : createdTimestamp]
sql.execute "INSERT INTO sn_token (\"token\", created_at) VALUES ($map.token, $map.created_at)"
一切正常,存储并登录到控制台的时间戳是:
2018-07-20 09:38:24.191
在第二个脚本中,我使用这个groovy代码段(我省略了连接到数据库的代码段代码)对同一行进行更新:
import java.util.Date;
import org.joda.time.DateTime;
DateTime now = DateTime.now()
Date date = now.toDate()
def updatedTimestamp = date.toTimestamp()
def myToken = "myToken"
sql.execute 'UPDATE sn_token SET updated_at = \'' + updatedTimestamp + '\' WHERE "token" = \'' + myToken + '\''
登录到控制台的updatedTimestamp变量的值为:
2018-07-20 09:40:44.706
生成的查询是:
UPDATE sn_token SET updated_at = '2018-07-20 09:40:44.706' WHERE "token" = "myToken"
尽管两个时间戳变量的格式相同,但更新SQL返回错误
ORA-01843: not a valid month
我不明白为什么……
有人能帮我解决这个问题吗?
谢谢