c# 数据保存到oracel中问题

时间:2022-03-23 17:16:35
现在有一个将 mssql的数据转存到orcale,我把mssql的数据先读取到datatable中然后拼 insert into 字符串
如:INSERT INTO personinfo (sPersonID ,sPersonName ,dAddTime, dUpdateTime) 
values (:sPersonID ,:sPersonName ,:dAddTime, :dUpdateTime)
但是现在问题来了,最后提交出现的错误ORA-01843: not a valid month ,mssql中的日期是这样的'2015-01-12 03:32:35',
请问怎么处理这个问题,ORACLE中dAddTime, dUpdateTime是TIMESTAMP类型,mssql中是Datatime类型

7 个解决方案

#1


TIMESTAMP是什么类型?
不应该是Date类型才对吗
oracle中date类型需要转换
to_date("2014-1-1 0:0:0","yyyy-mm-dd hh24:mi:ss")

#2


INSERT INTO personinfo (sPersonID ,sPersonName ,dAddTime, dUpdateTime) 
values (:sPersonID ,:sPersonName ,to_date(':dAddTime','yyyy-mm-dd hh24:mi:ss'),to_date(' :dUpdateTime','yyyy-mm-dd hh24:mi:ss'))

#3


pl/sql 中这样转换to_timestamp('2015-03-12 03:32:35' ,'yyyy-mm-dd hh24:mi:ss')  是没有问题的,现在就是有参数代替报错

#4


使用kettle吧,一个基于Java的开原的ETL工具,或者其它的ETL工具

#5


引用 3 楼 kingagile 的回复:
pl/sql 中这样转换to_timestamp('2015-03-12 03:32:35' ,'yyyy-mm-dd hh24:mi:ss')  是没有问题的,现在就是有参数代替报错

to_timestamp('','')是语法部分,是数据库里的函数,你需要把这个内容拼接到SQL语句里,而不是传进参数里
而只应该把时间字符串作为参数

#6


此外,如果你参数已经指定了是timestamp类型,那么可能不需要显式调用转换函数也可以,显式调用反而不对,需要测试一下

#7


就是说,如果你传入的参数是varchar类型,那么你需要执行to_timestamp转换类型
而如果参数本身就是timestamp类型,就不要转换了

#1


TIMESTAMP是什么类型?
不应该是Date类型才对吗
oracle中date类型需要转换
to_date("2014-1-1 0:0:0","yyyy-mm-dd hh24:mi:ss")

#2


INSERT INTO personinfo (sPersonID ,sPersonName ,dAddTime, dUpdateTime) 
values (:sPersonID ,:sPersonName ,to_date(':dAddTime','yyyy-mm-dd hh24:mi:ss'),to_date(' :dUpdateTime','yyyy-mm-dd hh24:mi:ss'))

#3


pl/sql 中这样转换to_timestamp('2015-03-12 03:32:35' ,'yyyy-mm-dd hh24:mi:ss')  是没有问题的,现在就是有参数代替报错

#4


使用kettle吧,一个基于Java的开原的ETL工具,或者其它的ETL工具

#5


引用 3 楼 kingagile 的回复:
pl/sql 中这样转换to_timestamp('2015-03-12 03:32:35' ,'yyyy-mm-dd hh24:mi:ss')  是没有问题的,现在就是有参数代替报错

to_timestamp('','')是语法部分,是数据库里的函数,你需要把这个内容拼接到SQL语句里,而不是传进参数里
而只应该把时间字符串作为参数

#6


此外,如果你参数已经指定了是timestamp类型,那么可能不需要显式调用转换函数也可以,显式调用反而不对,需要测试一下

#7


就是说,如果你传入的参数是varchar类型,那么你需要执行to_timestamp转换类型
而如果参数本身就是timestamp类型,就不要转换了