使用Microsoft Excel 2007查询Oracle Datawarehouse通过ODBC驱动程序

我试图通过两个date参数到Microsoft Excel中的查询。

查询工作得很好,当命令文本如下所示:

SELECT TINVOICE.INV_DINVOICEDATE, TINVOICEDETAIL.IDE_SCATEGORY, TINVOICETEMPLATEFIELDCATEGORY.IFC_SDESCRIPTION, TINVOICE.INV_CUS_LKEY, TCUSTOMER.CUS_SNUMBER, TCUSTOMER.CUS_SNAME, TINVOICE.INV_LNUMBER, TINVOICE.INV_AGR_LKEY, TINVOICEDETAIL.IDE_FLINETOTAL FROM PROD.TCUSTOMER TCUSTOMER, PROD.TINVOICE TINVOICE, PROD.TINVOICEDETAIL TINVOICEDETAIL, PROD.TINVOICETEMPLATEFIELDCATEGORY TINVOICETEMPLATEFIELDCATEGORY WHERE TCUSTOMER.CUS_LKEY = TINVOICE.INV_CUS_LKEY AND TINVOICE.INV_LKEY = TINVOICEDETAIL.IDE_INV_LKEY AND TINVOICEDETAIL.IDE_SCATEGORY = TINVOICETEMPLATEFIELDCATEGORY.IFC_SCODE AND ((TINVOICE.INV_DINVOICEDATE>= {ts '2015-02-01 00:00:00'}) AND (TINVOICE.INV_DINVOICEDATE< {ts '2016-02-01 00:00:00'}) AND (TINVOICEDETAIL.IDE_SCATEGORY<>'GS28') AND (TINVOICE.INV_LNUMBER<>0) AND (TINVOICEDETAIL.IDE_FLINETOTAL<>0)) ORDER BY TINVOICE.INV_LNUMBER 

但是当我通过交换这些块来减less参数{ts'2015-02-01 00:00:00'}这些'?' 它会抛出一个错误。 我已经玩过很多解决scheme,但似乎没有任何工作,或者我没有正确实施它们。 当我查询数据库的NLS属性时,它返回以下内容:

 PARAMETER VALUE NLS_LANGUAGE ENGLISH NLS_TERRITORY UNITED KINGDOM NLS_CURRENCY £ NLS_ISO_CURRENCY UNITED KINGDOM NLS_NUMERIC_CHARACTERS ., NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE ENGLISH NLS_SORT BINARY NLS_TIME_FORMAT HH24.MI.SSXFF NLS_TIMESTAMP_FORMAT DD-MON-RR HH24.MI.SSXFF NLS_TIME_TZ_FORMAT HH24.MI.SSXFF TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH24.MI.SSXFF TZR NLS_DUAL_CURRENCY € NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE 

如果有人能帮助,我会非常感激! 并可以提供更多的信息,如果需要!

谢谢!

这里只是猜测,但是{ts}构造是特定于ODBC / JDBC的,所以可能是将它与本地oracle中的variables绑定混合导致了问题。 为什么不尝试为Oracle的本地to_timestamp函数切换呢?

  AND ((TINVOICE.INV_DINVOICEDATE>= to_timestamp(?,'YYYY-mm-dd HH24:MI:SS') ) AND (TINVOICE.INV_DINVOICEDATE< to_timestamp(?,'YYYY-mm-dd HH24:MI:SS')) 

尽pipe还要检查并确保该字段是时间戳,而不是date(在格式化string中没有小数秒),在这种情况下to_Date会更合适。