2011-07-28 142 views
2

我有一個名爲'F_SMART_DATE()'的Oracle 10g函數,它返回標量DATE。它接受一個VARCHAR2參數,該參數可以是日期字符串(例如'2011-01-01','3/29/1966')或'智能'日期(例如'm-1'(一個月前),' yb-0「(本年度開始))。將Crystal Report命令參數傳遞給Oracle函數

當我在SQL Developer中執行的功能,它按預期工作:

--return 28-JUL-11 
SELECT F_SMART_DATE('M-1') SMART_DATE FROM DUAL; 

如果我創建使用相同的語法Command對象水晶報表,它按預期工作。

如果我在Command對象(名爲'AS_OF')中創建一個String參數並嘗試將它傳遞給函數,則麻煩開始。

Command對象的文本:

--reference Oracle function 
SELECT F_SMART_DATE({?AS_OF}) SMART_DATE FROM DUAL; 

如果我傳球,M-1(不含雙引號),我得到一條錯誤:「無法從數據庫中檢索數據。詳細信息:ORA-00904:「M」:無效標識符[數據庫供應商代碼:904]'。

如果我通過'M-1'(帶單引號),則調用按預期工作。

不幸的是,這句法變體不工作,要麼:

SELECT F_SMART_DATE(''' || {?AS_OF} || ''') SMART_DATE FROM DUAL; 

SELECT F_SMART_DATE(''({?AS_OF})'') SMART_DATE FROM DUAL; 

理想情況下,我將能夠從參數對話框中刪除引號。

回答

3

這是否工作:

SELECT F_SMART_DATE('{?AS_OF}') SMART_DATE FROM DUAL; 

它一直以來我用水晶報表一段時間,但我記得參數的工作更像是宏比綁定變量。

+0

我在發佈評論後幾分鐘內發現了相同的解決方案。 – craig

+0

並假設傳入參數的類型爲Date(而不是varchar2),則sql將相同或更改爲SELECT F_SMART_DATE({?AS_OF_DATE})SMART_DATE FROM DUAL; –