【问题标题】:How to pass a date parameter from report builder query designer to oracle database如何将日期参数从报表生成器查询设计器传递到 oracle 数据库
【发布时间】:2014-11-14 02:29:39
【问题描述】:

我正在使用连接到 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

谢谢

【问题讨论】:

  • ':FROM' 和 ':To' 在我看来很可疑。我相信您正试图让引擎将文本“:FROM”转换为 mm/dd/yyyy 格式。我相信你不想要抽动;你不是说to_date而不是to_char吗? :FROM 和 :To 可能已经是正确传递的字符串,需要转换为日期才能正确使用中间值。
  • 你的权利,我的意思是 to_date,我尝试了 to_char,因为我在网上找到了一个使用 to_char 而不是 to_date 的帖子,但没有用。 From和To是参数;你能给我正确的语法吗??
  • 应该只需要删除 tics 变量/参数不应该包含在 tics 中。数据类型是已知的,因为它必须作为参数传入,因此您不需要围绕它们进行抽动。
  • 我试过了但是没用,你能给我正确的语法吗

标签: oracle date reporting-services reporting oraclereports


【解决方案1】:

解决方案取决于 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')

【讨论】:

  • 我按照您的建议尝试了,数据集保存没有错误,但是在运行报告时出现错误“ORA-01036:非法变量名称/编号”
  • 如果数据完美插入数据库,说明生成报表时数据类型不匹配。
  • 如何跟踪它,我尝试使用 To_Date 函数将所有字段转换为日期,但没有成功
  • 您是否使用了准确的date format?顺便说一句,在您的报告中,您使用的是TO_DATE 还是CAST
  • im 使用 To_Date 和 loss_type 字段的值类似于“1/13/2014 11:24:00 AM”,From 和 To 是具有日期/时间数据类型的参数
【解决方案2】:

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

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

正确示例

这里是种子 Oracle 报告的“用户参数”的屏幕截图......特别是 :p_as_of_date 绑定变量。请注意,图中的 Property Inspector 可以识别数据类型和输入掩码。您是否以这种方式设置参数:From:To?具体来说,如果您的参数被用作日期,我会确保在属性检查器中将数据类型设置为日期。

这是“种子”Oracle 报告中 :p_as_of_date 绑定变量的 sn-p,这里它在查询中被引用:

 where      TRUNC(ps.gl_date)    <= :p_as_of_date 

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

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

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

【讨论】:

  • 我尝试了上述方法,但是在我单击确定保存后,弹出窗口“定义查询参数”列出了我的所有参数以及参数名称和参数值列,在我单击确定后出现另一个错误“ORA -01745:无效的主机/绑定变量名”。另请注意,在查询设计中,我没有与对象导航器屏幕相同的表和视图的可视界面,我只能编写查询;有没有办法展示它,因为它会促进很多工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多