1

我使用 OracleCommand 和 OracleDataAdapter 为 Oracle 构建了一个小型查询工具。用户只需输入一个完整的查询(无参数),执行,结果显示在 datagridview 中。到目前为止一切顺利,尽管我尝试了无效查询,例如:

SELECT * FROM mytable WHERE dateColumn = '1-JAN-10'

此查询不是适用于 Oracle 的有效 SQL。您必须使用 to_date() 函数与日期文字进行比较。SQL 开发人员也拒绝了它,但不知何故我的查询工具可以正常工作。这是否意味着我的 OracleCommand 在这里有点像向导,还是我做错了什么?还有一种方法可以省略这种行为,因为该工具的目的是测试查询,它应该始终有效......

谢谢

4

1 回答 1

4

该查询可能对 Oracle 有效。如果您以会话的日期格式提供日期字符串,则不必使用to_date(),但通常最好还是这样做以避免此类问题。

听起来NLS_DATE_FORMAT您的工具环境与 SQL Developer 中的环境不同,或者会话日期格式是由 OracleCommand 隐式设置的。

您可以select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT'从 SQL*Plus 和 SQL Developer 以及您的工具中看到它是什么;并从中nls_database_parameters查看哪个覆盖了数据库默认值。

看起来您的工具可能有DD-MON-RR,并且您期望在其他地方使用其他格式,但是如果不检查这些表,很难说出您在哪里使用数据库默认值以及在会话级别覆盖它的位置。我猜这是数据库默认值,但您在其他环境中有一个覆盖。

从 SQL Developer 中,尝试alter session set nls_date_format='DD-MON-RR';然后重新运行您的无效查询 - 也应该在那里工作。

于 2010-09-10T13:54:59.340 回答