Eclipse BIRT和Oracle:需要在运行报告之前设置角色

时间:2009-07-24 12:38:03

标签: eclipse oracle birt

是否可以在运行报告之前设置数据库角色?我有许多数据库,每个数据库包含许多具有相同表集的模式,其中每个模式都有许多角色来控制读,写,数据管理等。这些都不是默认角色。

在sqlplus或TOAD中,我可以在运行select语句之前执行SET ROLE。我想在BIRT做同样的事。

可以使用ODA数据源的afterOpen事件来执行此操作,但是我没有找到有关如何在JavaScript中获取和使用本机连接的任何示例。

我不允许在服务器端添加或更改任何内容。

3 个答案:

答案 0 :(得分:1)

您可以使用Java在数据源的afterOpen方法中对数据库进行额外调用。您可以使用JavaScript或Java事件处理程序来执行SET ROLE语句,或调用将为您执行它的存储过程。这在发生初始数据库连接之后但在数据集查询运行之前发生。然而,使用数据源连接进行调用会有点棘手,我现在没有提供代码作为示例。

另一种方法是创建一个存储的proc数据集,它将执行所需的命令,并首先执行该命令。将数据集拖放到报表设计中,并使其不可见。它将在任何其他查询之前首先运行。不是最干净的解决方案,但很容易做到

希望有所帮助

Le Birt专家

答案 1 :(得分:0)

您可以编写登录触发器并在此触发器中执行set角色(PL / SQL:DBMS_SESSION.SET_ROLE)。您可以确定要登录的用户的用户名,osuser,程序和计算机。

答案 2 :(得分:-1)

使用存储过程设置角色的方法不起作用 - 至少在Apache Derby上不行。原因:设置角色的生命周期仅限于过程本身的执行 - 从过程返回后,角色将与调用过程之前的角色相同,即执行报告的过程与之前没有任何角色相同集。