【问题标题】:How to set and use an Oracle Connection attribute如何设置和使用 Oracle 连接属性
【发布时间】:2015-07-28 19:31:25
【问题描述】:

我有一个数据库触发器,我希望在某个连接中他不会执行插入/更新/删除操作。

我考虑在他的 plsql 代码中使用一个属性值来指示此连接是否来自某种特定类型。我想在java中设置连接的这个属性。我怎样才能做到这一点?如果它不能完成,我愿意接受其他建议,说明如何使触发器在某些连接中不执行他的逻辑(取决于连接目的是什么)。

已编辑:

谢谢大家,我想我有一个不同的解决方案来解决我的问题。实际上,我在插入的行中有一个字段(触发触发器),它可以帮助我指示触发器是否应该触发。

【问题讨论】:

  • 你尝试过什么>>
  • 我只是不知道如何实现。
  • 如何区分连接?不同的用户?上下文?

标签: java oracle11g triggers


【解决方案1】:

我能想到的一种方法是使用dbms_application_info 将值传递给client_info

在你的 Java 程序中做:

cstmt = connection.prepareCall("{call dbms_application_info.set_client_info(?)}");
cstmt.setString(1, "no_triggers");
cstmt.execute();

然后在您的触发器中,您可以执行以下操作:

create or replace trigger ...
as
declare
  l_info varchar(65);
begin
  dbms_application_info.read_client_info(l_info);
  if l_info = 'no_triggers' then
    return;
  end if;

  ... actual trigger code follows here

end;

【讨论】:

    【解决方案2】:

    您不应该将自定义触发器用于用户访问控制,因为它很容易成为维护的噩梦。相反,请创建一个专用的 ROLE or PROFILE,它只是该表上的 GRANTed SELECT,用于您的“特殊”连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      • 2020-09-19
      • 2022-07-15
      • 1970-01-01
      • 2020-07-07
      相关资源
      最近更新 更多