Golang 中国

1.第一个错:oracle的to_date()函数第一个参数传入time.Now()得到的结果,报错ORA-00984,百度说是字符串应该用单引号,可time.Now()得到的就是字符串,用reflect.TypeOf查看也是string类型的.请知道的高手帮忙解答一下,谢谢了.

我的想法是用go的time包得到yyyymmddhhmiss的时间格式,再用to_date函数转换为oracle的date时间格式

2017-06-18 18:49:54 <LL_ERROR> ORA-00984: column not allowed here

1.1 代码:

timeNow := time.Now().Format("20060102150405")
fmt.Println(timeNow)                                  //打印20170618184954
fmt.Println(reflect.TypeOf(timeNow))                //打印string
timeNow = string(timeNow)
_, err = db.Exec("insert into AUTH_FAIL values(:1,0,'',to_date(timeNow,'yyyyMMddHH24miss'))", lineList[0])

1.2 在1.1代码的lineList[0]是一个字符串,这个字符串没问题,执行过下面的测试,可以查到插入成功结果(如下)

insert into AUTH_FAIL values('test',0,'',to_date('20060102150405','yyyyMMddHH24miss'))

SQL> select * from AUTH_FAIL;
LOGIN                                                   STATUS
-------------------------------------------------------------------------------------------------------------------------------- ----------
RESULT_DESC
--------------------------------------------------------------------------------------------------------------------------------------------
STATUS_TIME
------------
test                                                0
02-JAN-06

2 第二个错误是我在直接把’20060102150405’作为to_date()参数时执行sql语句不报ora00984的错,但得不到yyyymmddhhmiss的时间格式,执行下面的插入语句查询得到的时间格式不是yyyymmddhhmiss

_, err = db.Exec("insert into AUTH_FAIL values(:1,0,'',to_date('20060102150405','yyyyMMddHH24miss'))", lineList[0])
SQL查询AUTH_FAIL表和1.2显示的结果一样:

SQL> select * from AUTH_FAIL;
LOGIN                                                   STATUS
-------------------------------------------------------------------------------------------------------------------------------- ----------
RESULT_DESC
--------------------------------------------------------------------------------------------------------------------------------------------
STATUS_TIME
------------
test                                                0
02-JAN-06

2.2 用SQL直接在plsql窗口执行select to_char(to_date(‘20060102150405’,’yyyyMMddHH24miss’)) from dual; 和 select to_date(‘20060102150405’,’yyyyMMddHH24miss’) from dual; 显示时间格式也不对,是我系统设置有问题吗?请知道的高手帮忙解答一下,谢谢了

SQL> select to_char(to_date('20060102150405','yyyyMMddHH24miss')) from dual;
TO_CHAR(T
---------
02-JAN-06
SQL> select to_date('20060102150405','yyyyMMddHH24miss') from dual;
TO_DATE('200
------------
02-JAN-06
2 回复
jimyokl
#1 jimyokl • 2017-06-20 15:29

第一个错误解决了,原来是要放到后面

_, err = db.Exec("insert into AUTH_FAIL values(:1,0,'',to_date(:2,'yyyyMMddHH24miss'))", lineList[0],timeNow)

继续等高手指点第二个错误, 先谢谢个

jimyokl
#2 jimyokl • 2017-06-20 16:02

刚刚问到个解释说

oracle 存入后date类型 取出后在各个客户端显示不一样,例如sqlplus和plsql不一样,希望我的to_date格式转换正确

谢谢楼上各位的回复

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。

作者

发表话题