马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
目前,我在一个升级项目(Cognos8.3升级到Cognos10)中:遇到一个很奇怪的问题:运行一张报表时出现如下错误:ORA-01846: not a valid day of the week 。在报表中有这个的语句:Select next_day(?p_date?,'星期四',) from dual; 根据业务需要取下一个星期四。此报表,在Congos8.3中没有问题,升级到Cognos10后就出现这个问题。 先介绍一下环境,Cognos8.3 为Windows2003,Cognos10为Redhat Linux5.4 应用服务器WAS 6.1。
为了解决这个问题走了很多冤枉路。
首先,我怀疑可能是数据库中记录有不合法的日期值,检查了数据,而且Cognos8.3又没有任何问题。所以排除了此问题。
其次,在安装的时候,Cognos10安装为英文,所以怀疑可能需要安装语言包,因为在Cognos8中有单独的语言包。可是,找了安装介质,发现Congos10没有单独的语言包(不知道,我的介质是不是完整的)。所以,只好另外找原因了。
后来,我又在自己自己上安装了Congos10,安装时,语言选择中文,然后连接Linux环境下Cognos10的内容库,运行发现此报表没问题。我又重新安装了Windows下Cognos,这次,安装环境,选择了英文。再运行报表,发现同样没有问题。所以排除了Cognos10语言包的问题。可能,是Linux环境问题。
最后,检查了Linux下Cognos和Oracle用户的环境变量,发现NLS_LANG都设置成了american_america.UTF8。在Linux Sqlplus中执行Select next_day(?p_date?,'星期四',) from dual; 提示:ORA-01846: not a valid day of the week 。到此,已经找到问题所在了。于是,将NLS_LANG设置成"Simplified Chinese_china.UTF8" ,Sqlplus中执行没有问题。可在运行报表时,报表还是出错,仍然是相同的问题。现在已经排除了是Oracle客户端环境设置问题。 现在找找,会不会WAS的问题,会不会是WAS提交中文参数时,变成了乱码。于是,找了相关资料。
进入控制台的:服务器-》应用程序服务器-》运行的应用如:server1 -》Java 和进程管理 -》进程定义-》Java 虚拟机页面中的“通用jvm参数”的值设成“-Ddefault.client.encoding=UTF8-Dfile.encoding=UTF8 -Duser.language=zh -Duser.region=CN",然后,重新启动服务器,运行报表 OK ,完全没有问题。
到此,问题是解决了。不过在解决问题的过程中也确实走了一些弯路。不过收获挺大的,其实还有另外一个方法可能解决此问题。
Next_day 用法:
返回在“日期时间型表达式”之后第一次出现由“字符串型表达式”命名的工作日的日期时间。返回的值与“日期时间型表达式”具有相同的格式。 Select next_day(?p_date?,'星期四',) from dual; 将星期四改为数据序号5,Select next_day(?p_date?,5,) from dual;改成这样也不会有问题。可是,我们这是升级项目,而且以前的报表也不是我们开发的,在尽量不改动以前报表的情况下,我们选择了前者。这是我的一点经验,希望对大家有帮助。后面还会附上Linux环境下,Cognos跟WAS 搭建集群。现在集群,还是监控中。。。
该贴已经同步到 xiaoerp的微博 |