ORA-01843: 无效的月份
问题是这个:
SELECT * FROM v$parameter WHERE name = ‘nls_date_language’;
ALTER SESSION SET NLS_DATE_LANGUAGE=‘AMERICAN’;
原因:
原因是这个TO_DATE的Format中的“MON”格式出现异常,但是这个格式完全符合Oracle的格式要求。
再查看nls_date_language参数,发现这个参数值为NULL
1.这是因为客户端是中文环境,格式mon就不能用英文的月份写法,必须用中文的“六月”
如果不想修改sql语句运行的话,就需要在执行该语句之前,使用alter session 命令将nls_date_language修改为american,如下:
alter session set nls_date_language='american’以英语显示日期。
2若你的客户端是英文环境,那就是你没有用oracle数据的时间函数查询数据,应在sql语句中使用oracle数据库中的时间函数。
oracle:数据库中V$、GV$、X$、V_$、GV_$之间的关系说明: GV_$:是GV$的同义词。V_$:是V$的同义词。
经常会遇到查询语句select * from v$parameter等等
尤其是当需要给普通用户授予对SQL查询相关的几个重要的动态性能视图,需要了解:
v$parameter
v$session --当前session情况
v$sql --所有已经执行过的sql记录
v$process ; --当前的数据库连接情况
v$sql_plan
v$sql_plan_statistics
v$sql_workarea
详细参数介绍参考:
https://www.cnblogs.com/notester/articles/5702395.html
https://blog.csdn.net/daf380/article/details/82982586
3.v$parameter介绍
- v$parameter是oracle数据库的动态字典表(视图),它保存了数据库参数的设置值
- 如果要修改其中的值有两种方式
2.1 修改当前会话参数:alter session set sql_trace=true --开启trace
2.2 修改数据库全局参数:alter system set 参数名称=参数值 scope=spfile/memory/both
scope是可选参数,
scope=spfile只修改启动文件,下次启动后生效
scope=memory只修改当前实例运行参数,重启后恢复
scope=both,既修改当前运行参数同时也修改spfile
参考:
1.
https://blog.csdn.net/dbagaoshou/article/details/52514343
http://www.cnblogs.com/xunfang123/p/4169909.html
2.
https://blog.csdn.net/seagal890/article/details/82832024
https://www.cnblogs.com/notester/articles/5702395.html
https://blog.csdn.net/haiross/article/details/41546289(借鉴)
https://blog.csdn.net/bisal/article/details/51171206(借鉴)
3.
https://zhidao.baidu.com/question/511226205.html