我有一个名为'F_SMART_DATE()'的Oracle 10g函数,它返回一个标量DATE。它接受单个VARCHAR2参数,该参数是日期字符串(例如'2011-01-01','3/29/1966')或'智能'日期(例如'm-1'(一个月前)), yb-0'(当年年初))。
当我在SQL Developer中执行该函数时,它按预期工作:
--return 28-JUL-11
SELECT F_SMART_DATE('M-1') SMART_DATE FROM DUAL;
如果我使用相同的语法创建一个带有Command对象的Crystal Report,它将按预期工作。
如果我在Command对象中创建一个String参数(名为'AS_OF')并尝试将其传递给该函数,则会启动麻烦。
命令对象的文字:
--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;
理想情况下,我可以从参数对话框中删除引号。
答案 0 :(得分:3)
这是否有效:
SELECT F_SMART_DATE('{?AS_OF}') SMART_DATE FROM DUAL;
我使用Crystal Reports已经有一段时间了,但我记得参数的工作方式更像是宏而不是绑定变量。