我使用OracleCommand和OracleDataAdapter为Oracle构建了一个小型查询工具。用户只需输入完整查询(无参数),执行,结果将显示在datagridview中。到目前为止一直很好,虽然我尝试了无效的查询,例如:
SELECT * FROM mytable WHERE dateColumn = '1-JAN-10'
此查询对Oracle无效。您必须使用to_date()函数与日期文字进行比较。 SQL开发人员也拒绝它,但不知何故我的查询工具正常工作。这是否意味着我的OracleCommand在这里有点像巫师,或者我做错了什么?还有一种方法可以省略这种行为,因为该工具的目的是测试查询,这应该始终有效...
由于
答案 0 :(得分:4)
该查询可能对Oracle有效。如果您以会话的日期格式提供日期字符串,则不必使用to_date()
,尽管通常最好这样做以避免此类问题。
听起来您的工具环境中的NLS_DATE_FORMAT
与SQL Developer中的select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT'
不同,或者OracleCommand隐式设置了会话日期格式。
您可以nls_database_parameters
查看SQL * Plus和SQL Developer以及您的工具中的内容;并从DD-MON-RR
查看哪个覆盖数据库默认值。
看起来您的工具可能有alter session set nls_date_format='DD-MON-RR';
并且您希望其他地方使用其他格式,但是如果不检查这些表格,则很难说您在哪里使用数据库默认值以及您在会话中覆盖它的位置水平。我猜这是数据库的默认值,你在其他环境中有一个覆盖。
从SQL Developer,尝试{{1}},然后重新运行无效查询 - 也应该在那里工作。