一:问题描述:今天别的公司给的sql文件(201901.sql),内容如下:Insert into T_ORDER (ORDER_NO,ORG_ORDER_NO,MCHNT_NO,MCHNT_NAME,ORG_NAME,ORG_ID,MD,ORDER_AMOUNT,AMOUNT,CREATED,SOURCE,PAY_ST,TIME_PAID,OPEN_ID) values ('15463005906703193844','15463005906703193844','193298','王学政源','支行','005265','转入',200000,200000,to_timestamp('01-1月 -19 07.56.30.670000000 上午','DD-MON-RR HH.MI.SSXFF AM'),0,2,to_timestamp('01-1月 -19 07.56.13.000000000 上午','DD-MON-RR HH.MI.SSXFF AM'),'694BED617AEA24F48F8E564393AFE851');
数据量大概是1000多万,所以采用批量执行sql文件来导入数据库,但是报错,两个问题!
SQL>@201901.sql
问题1,具体报错如下,这个问题是字符集的问题,
ORA-01756: quoted string not properly terminated
问题2 ,具体报错如下,这个问题是日期格式参数的问题
ORA-01843: not a valid month
然而用plssql developer工具执行一条数据,是可以成功的,这说明数据本身是没有问题,plssql developer强大之处在于它可以作为数据库和客户端的无缝兼容,格式自动转换,字符集以及其他的格式转换
二:问题解决:
一:解决字符集问题:
1.1.file -i 看文件的字符集,发现是utf-8
[oracle@ory-mysql-east-01 backup]$ file -i 2019012.sql
2019012.sql: text/plain; charset=utf-8
1.2.然后设置oracle用户的环境变量NLS_LANG(保持和文件的字符集一样)
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
二:解决日期格式参数的问题
因为sql文件中的日期是中文的,例如:01-1月 -19 07.56.13.000000000 上午,但是数据库的日期格式是英文的,
如下所示,所以只需要修改下日期的格式即可,NLS_DATE_LANGUAGE设置为简体中文,为防止系统出现问题,只需要修改session级别的即可!
2.1.刚