0

我正在尝试调用一个Microsoft SQL Server 存储过程,它在Oracle BI Publisher 11g (11.1.1.7)中以表格形式(行/列)提供数据。

选择过程调用作为数据模型的数据源不起作用,因为 BIP 期望它的行为类似于对 Oracle 数据库的 PL/SQL 调用。

Oracle 开发人员声称该软件不支持此功能。

有没有办法绕过这个限制?

4

1 回答 1

0

尽管 BI Publisher 11g 不支持开箱即用,但有一个解决该问题的方法。它涉及诱使软件认为它正在执行标准的 PL/SQL 调用,而实际上它正在 SQL Server 数据源上执行存储过程。

1) 确保在运行 BIP 实例的 weblogic 服务器上安装了本机 MS SQL 服务器库。

它可以在这里从 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 服务器。

2) 在 BI Publisher 管理中,创建一个新的 JDBC 数据源。

我们的示例适用于以下属性:

驱动类型: Microsoft SQL Server 2008
数据库驱动类: com.microsoft.sqlserver.jdbc.SQLServerDriver
连接字符串: jdbc:weblogic:sqlserver://[hostname]:[port];databaseName=[database name]

填写用户名/密码并测试连接(如果驱动程序安装正确,这应该可以正常工作)

3)创建一个新的数据模型。

选择 SQL 查询作为您的数据集。在这里,添加这些属性:

数据源:您的 JDBC 数据源
SQL 类型:非标准 SQL
行标记名称:(自己选择一个)- 现在只写测试。

4) 在 SQL 查询下,我们现在需要让 BIP 相信它正在调用 Oracle SP,而实际上它正在调用您的 MS 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 一起使用。

于 2014-12-10T08:14:28.173 回答