将Crystal Report Command参数传递给Oracle函数

时间:2011-07-28 21:16:49

标签: oracle function crystal-reports

我有一个名为'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;

理想情况下,我可以从参数对话框中删除引号。

1 个答案:

答案 0 :(得分:3)

这是否有效:

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

我使用Crystal Reports已经有一段时间了,但我记得参数的工作方式更像是宏而不是绑定变量。