如何将日期参数从报表生成器查询设计器传递到oracle数据库

时间:2014-09-19 13:15:57

标签: oracle date reporting-services reporting oraclereports

我正在使用连接到oracle数据库的报表生成器3.0。 我试图在查询中传递日期参数但没有成功,我不知道确切的语法。 我试过了:

SELECT * 
FROM igeneral.GCL_CLAIMS
WHERE CREATED_BY IN (:CREATED_BY) AND CLAIM_YEAR IN(:UW_YEAR)  
  AND (Trunc(LOSS_DATE,'mm/dd/yyyy') BETWEEN to_char(':From', 'mm/dd/yyyy') 
  AND to_char('To', 'mm/dd/yyyy'))

我收到此错误:ORA-01036: illegal variable name/number

我也试过这个:

SELECT * 
FROM igeneral.GCL_CLAIMS 
WHERE CREATED_BY IN (:CREATED_BY) AND CLAIM_YEAR IN(:UW_YEAR)  
  AND (LOSS_DATE BETWEEN ':From' AND ':To') 

我收到此错误:ORA-01036: illegal variable name/number

感谢

2 个答案:

答案 0 :(得分:0)

解决方案取决于from和to参数的data type

如果您的参数是DATE数据类型,请使用to_char将日期转换为您要显示的所需格式的文字。否则,如果参数为VARCHAR2数据类型,请使用to_date将日期文字转换为日期以进行比较。

在您的情况下,LOSS_DATE列可能是DATE,并且您的参数是文字,因此请使用适当格式掩码对参数进行“TO_DATE”。

LOSS_DATE BETWEEN to_date(':From', 'mm/dd/yyyy') AND to_date('To', 'mm/dd/yyyy')

答案 1 :(得分:0)

错误ORA-01036:非法变量名称/编号,当对象导航器中标识的参数与查询中引用的绑定变量不对应时,通常会出现在Oracle报表中。

您的:From:To绑定变量是否出现在对象导航器中的“用户参数”中? 我确实注意到你引用的代码在:To绑定变量之前没有冒号。

更正示例

以下是种子Oracle报告的“用户参数”....的屏幕截图,特别是:p_as_of_date绑定变量。请注意,如图所示的Property Inspector,一个标识数据类型和输入掩码。您是否以这种方式设置了参数:From:To?具体来说,如果您的参数被用作日期,我将确保在Property Inspector中将Datatype设置为Date。 enter image description here

以下是“种子”Oracle报告中的:p_as_of_date绑定变量的片段,此处它在查询中被引用:

 where      TRUNC(ps.gl_date)    <= :p_as_of_date 

请注意,不需要强制转换。 根据您的查询,我会采用这种方法(同样,没有转换):

AND TRUNC(LOSS_DATE,'mm/dd/yyyy') BETWEEN :From AND :To

因此,我只是确保“用户参数”中引用的绑定变量与查询中的绑定变量相对应。