我有个存储过程,关键代码如下:……
Open cursor for
SELECT * from sometable T where '05-AUG-2010' BETWEEN NVL(T.END_EFFDATE, T.POL_START_DT) AND T.POL_END_DT;
……
在oracle 服务器上直接执行是正确的,我在本机用c#代码调用这个存储过程也是正确的。但是同样的代码换另一台机器调用,就报错Not a valid month,好像是日期格式不对。我检查了2台客户机器的区域,语言,时间格式设置都一样。
这会是什么问题?
为什么我仅仅是调用放在oracle服务器上的存储过程,结果会因为客户端机器而不同呢?
Open cursor for
SELECT * from sometable T where '05-AUG-2010' BETWEEN NVL(T.END_EFFDATE, T.POL_START_DT) AND T.POL_END_DT;
……
在oracle 服务器上直接执行是正确的,我在本机用c#代码调用这个存储过程也是正确的。但是同样的代码换另一台机器调用,就报错Not a valid month,好像是日期格式不对。我检查了2台客户机器的区域,语言,时间格式设置都一样。
这会是什么问题?
为什么我仅仅是调用放在oracle服务器上的存储过程,结果会因为客户端机器而不同呢?
解决方案 »
- oralce 的 ora-03114:未连接到oralce
- Oracle存储过程如何将整型转换成vchar型
- 如何能让oracle的sql语句查询的结果变成3列显示
- oracle中求两日期之间间隔的天数用什么函数?
- 关于学生数据库规划设计、导入的一个问题
- ???菜鸟刚学oracle,现在想重装机器了,我想把我建的一个叫word的数据库保存下来,考的别的机器上,等装完系统再考回来,恢复数据库,
- oracle trigger problem
- 在哪里可以下载oracle教程!
- 請問,開發pro*c/c++的,用什麽編輯器比較好?
- ORACLE profile 救命啊
- 大家帮我看看这个语句Oracle下怎么写
- ORA 00001 unique constraint (System.CDXXID )violated
Open cursor for
SELECT * from sometable T
where to_date('05-AUG-2010','dd-mon-yyyy','NLS_DATE_LANGUAGE = ''AMERICAN''')
BETWEEN NVL(T.END_EFFDATE, T.POL_START_DT) AND T.POL_END_DT;-- 其实:日期字段没有你这样比较的!
scott@TBWORA> select TO_DATE('05-AUG-2010','dd-mon-yyyy') from dual;
select TO_DATE('05-AUG-2010','dd-mon-yyyy') from dual
*
第 1 行出现错误:
ORA-01843: 无效的月份
scott@TBWORA> alter session set nls_date_language=american;会话已更改。scott@TBWORA> select TO_DATE('05-AUG-2010','dd-mon-yyyy') from dual;TO_DATE('05-
------------
05-AUG-10-- 我之所以第一次执行语句: select TO_DATE('05-AUG-2010','dd-mon-yyyy') from dual;
-- 失败,是因为我的系统的默认日期语言是简体中文,而你提供的日期格式中 '05-AUG-2010' 是英文,
-- 与我的默认日期格式不匹配,所以出错!-- 当我修改了当前会话的日期语言后,执行就成功啦!
select to_date('05-AUG-2010','dd-mon-yyyy','NLS_DATE_LANGUAGE = ''AMERICAN''') from dual;select to_date('05-1月-2010','dd-mon-yyyy','NLS_DATE_LANGUAGE = ''SIMPLIFIED CHINESE''') from dual;
所以我才直接写了AUG,没有加格式转换。
为什么不同机器调用时候,会和各自客户端的系统语言有关,而不是以服务器上为准呢?
我主要疑惑的是这个问题。
但是在C#代码里调用,就出错了,这又是为什么?
-- 不管你当前会话的nls_date_language参数的值是多少!
-- 这样也就避免了你这样的错误的出现几率!