我的查询直接作用于表,但写到视图中就不工作了。

问题描述 投票:0回答:1

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的日期变量在三个例子中都是相同的,因为三次都是同一个变量。前两个查询正常。第三个查询说无效的月份。

我把这三个查询都放在页面上的一行中,完全和上面一样。前两个返回数据,第三个出错。

是的,这个设置很愚蠢。我也没办法,他们是继承的系统,我无法改变,只能应付。

oracle view union oracle12c
1个回答
0
投票

我认为 date format 有别于 databaseConnection1databaseConnection2.

这就是为什么在两个不同的数据库上单独查询可以,而在一个数据库上合并查询就不行了。

请你在两个数据库中检查下面的表格,看看是否有以下内容 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")#
© www.soinside.com 2019 - 2024. All rights reserved.