Oracle插入数据报错
背景
最近接手一个老系统,DB使用的是Oracle,很多流程都是用了存储过程和函数。现在不是很熟悉,虽然以前在大学的时候学习Oracle,后面再也没有碰过。现在感慨,知识学了没有用,但一旦需要用到的时候,会发现至少了解一点,不至于那么被动。所以多学习一点技术或者其他生活知识,都是十分必要的,说不定哪天就用上了。
问题描述
在看书的时候,敲入书中的代码,一条简单插入语句,如下:
1 | INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698,TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30); |
提示:ORA-01843: 无效的月份
解决方法
看了一下Oracle中关于 TO_DATE
函数的文档1
The default date format is determined implicitly by the NLS_TERRITORY initialization parameter or can be set explicitly by the NLS_DATE_FORMAT parameter.
在Datetime格式2中也进行了说明:
The default datetime format template is specified either explicitly with the initialization parameter NLS_DATE_FORMAT or implicitly with the initialization parameter NLS_TERRITORY. You can change the default datetime formats for your session with the ALTER SESSION statement.
- 方法一:
1 | INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698,TO_DATE('22-FEB-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE = American'), 1250, 500, 30); |
但是需要修改每条语句,比较麻烦,方法二可以批量搞定。
- 方法二:
修改当前会话的所使用的语言,具体如下,然后再执行所有的插入语句。
1 | alter session set nls_date_language='american' |
参考资料
Author: cloudfeng
Link: https://cloudfeng.github.io/2018/07/29/arts/tip/T-oracle-date-error/
License: 知识共享署名-非商业性使用 4.0 国际许可协议