【问题标题】:My query that works directly to a table does not work when written to a view我的直接对表起作用的查询在写入视图时不起作用
【发布时间】:2020-05-01 18:49:50
【问题描述】:

Oracle 12c,ColdFusion 2018

我在两个不同的数据库中有两个 相同 表。有一个视图使用 UNION 将数据连接到一个数据集中,使用数据库链接。该视图有效且没有错误。

当我从 ColdFusion 查询视图时,我收到“not a valid month”错误。

当我只查询其中一个表(而不是视图)时,我没有收到同样的错误。

知道为什么会发生这种情况吗?

Table1 in database1
EmployeeID (number)
ShiftCode (varchar2)
ShiftTime (date)

Table2 in database2
EmployeeID (number)
ShiftCode (varchar2)
ShiftTime (date)


ViewBothTables  - Table1 and table2 created in database1
SELECT EmployeeID, ShiftCode, ShiftTime
FROM Table1
UNION
SELECT EmployeeID, ShiftCode, ShiftTime
FROM USER.Table2@databaseConnection2


Query1 in ColdFusion - This works - returns 48 rows
SELECT employeeID, ShiftCode, ShiftTime
FROM USER.table1@databaseConnection1
Where ShiftTime <= #thisSchedWeekEnd#
            AND
      ShiftTime >= #thisSchedWeekStart# 

Query2 in ColdFusion - This works - returns 10 rows
SELECT employeeID, ShiftCode, ShiftTime
FROM USER.table2@databaseConnection2
Where ShiftTime <= #thisSchedWeekEnd#
            AND
      ShiftTime >= #thisSchedWeekStart# 

Query 3 in ColdFusion - this gives me the error
SELECT employeeID, ShiftCode, ShiftTime
FROM USER.viewBothTables@databaseConnection1
Where ShiftTime <= #thisSchedWeekEnd#
            AND
      ShiftTime >= #thisSchedWeekStart# 


[Macromedia][Oracle JDBC Driver][Oracle]ORA-01843: not a valid month ORA-02063: preceding line from databaseConnection1


结构相同,Table1 和 Table2 是两个独立数据库中相同表(具有不同人员)的副本。该视图有效,并且可以查看(哈哈)我正在从第三个数据库进行查询。 ColdFusion 日期变量在所有三个示例中都是相同的,因为它三次都是同一个变量。前两个查询有效。第三个说无效的月份。

我在页面上连续三个查询,与上面完全一样。前两个返回数据,第三个错误输出。

是的,设置很愚蠢。我对此无能为力,它们是继承的系统,我无法更改,只能处理。

【问题讨论】:

  • 这通常是日期存储在 VARCHAR2 列中的情况,并且并非所有值都共享相同 - 正确 - 格式掩码。
  • 看不到的代码无法调试。
  • 我已经用结构和更多信息更新了我的原始帖子。

标签: oracle view union oracle12c


【解决方案1】:

我认为date formatdatabaseConnection1databaseConnection2 之间是不同的。

这就是为什么对两个不同数据库的单独查询有效而对一个数据库的组合查询无效的原因。

您能否在两个数据库中查看下表中的NLS_DATE_FORMAT

    select * from nls_session_parameters;

更新 1:-由于两个数据库的日期格式相同,请尝试显式转换参数的日期格式,如下所示

  SELECT employeeID, ShiftCode, ShiftTime
  FROM USER.viewBothTables@databaseConnection1
   Where ShiftTime <= #dateFormat(thisSchedWeekEnd, "mm/dd/yyyy")#
        AND
   ShiftTime >= #dateFormat(thisSchedWeekStart, "mm/dd/yyyy")#

【讨论】:

  • 两者都是 NLS_DATE_FORMAT MM/DD/YYYY
  • 您传递给#thisSchedWeekEnd# 和#thisSchedWeekStart# 的值是什么
  • theWeek1 变量是通过用户填写的表单的日期。日期被验证为具有正确格式和 mm/dd/yyyy 格式的日期。 WeekEnd 变量使用相同的处理。
猜你喜欢
  • 2012-10-29
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 2016-02-08
相关资源
最近更新 更多