直接作用于表的查询在写入视图时不起作用



Oracle 12c,ColdFusion 2018

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

当我从ColdFusion查询视图时,我得到一个"不是有效月份"的错误。

当我只查询其中一个表(而不是视图(时,不会得到相同的错误。

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

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

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

我在页面上的一行中有所有三个查询,与上面完全一样。前两个返回数据,第三个错误输出。

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

我认为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")#

最新更新