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

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

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

谢谢

有帮助吗?

解决方案

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

听起来您有不同的 NLS_DATE_FORMAT 在您的工具环境中,在SQL开发人员中或会话日期格式是由OracleCommand隐式设置的。

你可以 select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT' 查看SQL*Plus和SQL开发人员以及工具的内容;并来自 nls_database_parameters 查看哪个是覆盖数据库默认值。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top