是否可以在运行报表之前设置数据库角色?我有许多数据库,每个数据库都包含许多具有相同表集的模式,其中每个模式都有许多角色来控制读取、写入、数据管理等。这些都不是默认角色。
在 sqlplus 或 TOAD 中,我可以在运行 select 语句之前执行 SET ROLE 。我想在 BIRT 中做同样的事情。
可以使用 ODA 数据源的 afterOpen 事件来执行此操作,但我还没有找到任何关于如何在 JavaScript 中获取和使用本机连接的示例。
我不允许在服务器端添加或更改任何内容。
您可以使用 Java 在数据源的 afterOpen 方法中对数据库进行额外调用。您可以使用 JavaScript 或 Java 事件处理程序来执行 SET ROLE 语句,或调用将为您执行它的存储过程。这发生在建立初始数据库连接之后,但在数据集查询运行之前。但是,使用数据源连接进行调用会有点棘手,而且我现在没有代码可以作为示例提供。
另一种方法是创建一个存储的 proc 数据集,该数据集将执行所需的命令,并首先执行该命令。将数据集拖放到报表设计中,使其不可见。它将在任何其他查询之前首先运行。不是最干净的解决方案,但很容易做到
希望有帮助
Le Birt 专家
您可以编写登录触发器并在此触发器中设置角色(PL/SQL:DBMS_SESSION.SET_ROLE)。您可以确定要登录的用户的用户名、osuser、程序和机器。
使用存储过程来设置角色的方法行不通——至少在 Apache Derby 上不行。原因:设置角色的生命周期仅限于过程本身的执行 - 从过程返回后,角色将与调用过程之前的角色相同,即执行报告时与没有角色相同放。