我正在使用SSRS(2k5)来报告来自oracle的数据.该报告的目的是对数据进行大约100次检查(完成后)以查看是否输入正确(并且我们的软件按照预期的方式运行).为了实现这一点,我创建了一个包含和管道功能的实现WITH子句.大致在Oracle中构建的包看起来像这样:
WITH A as(从X中选择东西),B as(从Y join X中选择东西),C as(从Z join X中选择东西)
Subquery1
联盟
Subquery2
联盟
…
Subquery100
我使用Table()直接从SSRS调用此包函数.一切都很好.但是,如果我在当天晚些时候运行它,我会收到一条错误消息:
ORA-32036: unsupported case for inlining of query name in WITH clauSEORA-6512: at “[function name]”
但是,如果我打开Oracle SQLDeveloper并运行该函数然后返回到SSRS,则everthing运行正常(暂时).
我意识到它可能对我的嵌套WITH子句感到生气,但是什么会导致它工作一段时间,然后很快失败?请注意,它始终适用于SQLDeveloper.
提前感谢你的帮助!
解决方法
您的问题是您使用(在SSRS内部)连接到Oracle的客户端版本(或可能是客户端中的驱动程序)可能不支持WITH子句中的函数调用.
在9i客户端中,WITH子句没有完全正常运行,我怀疑哪个客户端连接到Oracle(即使它不是9i客户端)仍然没有完全正常运行.
你必须要么:
1)在SSRS中升级Oracle客户端(或驱动程序)(如果可能的话)
2)升级您的SSRS版本(如果它不是最新版本,但请检查是否值得先进行升级)
3)重新编写没有WITH子句的查询,而是使用内联视图.
另一种选择是创建所需数据的DB视图,并在select语句中引用它们,这不是理想的,但可能是一个选项.
希望能帮助到你…