我正在尝试调用一个Microsoft SQL Server 存储过程,它在Oracle BI Publisher 11g (11.1.1.7)中以表格形式(行/列)提供数据。
选择过程调用作为数据模型的数据源不起作用,因为 BIP 期望它的行为类似于对 Oracle 数据库的 PL/SQL 调用。
Oracle 开发人员声称该软件不支持此功能。
有没有办法绕过这个限制?
我正在尝试调用一个Microsoft SQL Server 存储过程,它在Oracle BI Publisher 11g (11.1.1.7)中以表格形式(行/列)提供数据。
选择过程调用作为数据模型的数据源不起作用,因为 BIP 期望它的行为类似于对 Oracle 数据库的 PL/SQL 调用。
Oracle 开发人员声称该软件不支持此功能。
有没有办法绕过这个限制?
尽管 BI Publisher 11g 不支持开箱即用,但有一个解决该问题的方法。它涉及诱使软件认为它正在执行标准的 PL/SQL 调用,而实际上它正在 SQL Server 数据源上执行存储过程。
它可以在这里从 MSDN 下载:http: //msdn.microsoft.com/en-us/sqlserver/aa937724.aspx - 根据您的 JRE 版本,您需要使用一个或另一个 jar 文件:
对于 JRE 1.6 及更高版本,请使用 sqljdbc4.jar。对于 1.5 及以下版本,请使用 sqljdbc.jar。
你应该把它放在你的 $MIDDLEWARE_HOME\user_projects\domains\$your_domain_here$\lib\ 文件夹中,然后记得重新启动 weblogic 服务器。
我们的示例适用于以下属性:
驱动类型: Microsoft SQL Server 2008
数据库驱动类: com.microsoft.sqlserver.jdbc.SQLServerDriver
连接字符串: jdbc:weblogic:sqlserver://[hostname]:[port];databaseName=[database name]
填写用户名/密码并测试连接(如果驱动程序安装正确,这应该可以正常工作)
选择 SQL 查询作为您的数据集。在这里,添加这些属性:
数据源:您的 JDBC 数据源
SQL 类型:非标准 SQL
行标记名称:(自己选择一个)- 现在只写测试。
这部分假设您的存储过程提供了 N 数量的行和列标签。
以下是我们为我们的 SP 解决它的方法,该 SP 称为 nrdart_get_custody_holding_headers_sp '2014-11-25',其中参数是用户提供的日期。
declare @var1 datetime
declare @sql varchar(255)
set @var1 = '2014-11-25'
set @sql = 'nrdart_get_custody_holding_headers_sp' +'''' + cast(@var1 as varchar) + ''''
exec (@sql)
在这里,我们声明了一些 SQL Server 数据类型,并将它们设置为我们的日期参数和我们的过程调用名称,使用强制转换函数和转义字符的一些创造性使用,最后在存储过程上调用 exec。
如果您使用标准 BIP 参数而不是我们上面的硬编码示例,参数 var1 也将起作用
即 :userDate 其中 :userDate 指的是数据模型中名为 userDate 的现有参数。
如果单击确定后看不到行/列标签,请不要担心。相反,单击“查看数据”即可。包含来自 Microsoft SQL Server 上的 SP 的数据的行和列。现在继续将其保存为示例数据并像往常一样设计报告布局。对于非日期参数,您可能需要稍微使用数据类型,但我不明白为什么您不应该让它也与整数或 varchars 一起使用。