如何在BI Publisher 11g中调用SQL Server存储过程?

时间:2014-12-10 08:14:28

标签: sql-server stored-procedures bi-publisher

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

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

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

有没有办法解决这个限制?

1 个答案:

答案 0 :(得分: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解决它的问题,称为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之前,使用cast函数和转义字符的一些创造性使用将它们设置为我们的日期参数和我们的过程调用名称。

如果使用标准BIP参数而不是上面的硬编码示例,参数var1也会起作用

即。 :userDate其中:userDate指的是数据模型中名为userDate的现有参数。

如果您在点击“确定”后看不到行/列标签,请不要担心。相反,点击"查看数据"然后你去包含Microsoft SQL Server上SP的数据的行和列。现在继续像往常一样将其保存为样本数据和设计报告布局。对于非日期参数,您可能需要使用数据类型稍微玩一下,但我不明白为什么您不应该使用整数或变量。