首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量上传和触发器

批量上传和触发器
EN

Stack Overflow用户
提问于 2010-09-06 22:42:06
回答 2查看 1.3K关注 0票数 2

有关批量绑定和触发器的几个问题(Oracle 10g)

1)批量绑定是否会执行行级触发器?

2)如果是,那么,是否有任何选项可以仅对批量绑定抑制执行?

3)如果没有,那么有没有办法在批量绑定中执行行级触发器?

4)在批量绑定的行级触发器执行的情况下,性能是否会受到影响?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-06 22:56:46

执行大容量绑定插入时,触发器仍处于启用和激发状态。当然,您可以在触发器和执行批量插入的代码中加入自己的逻辑,如下所示。

在包规范中:

代码语言:javascript
复制
create or replace package my_packags is

    in_bulk_mode boolean default false;

    ... -- rest of package spec
end;

在触发器中:

代码语言:javascript
复制
begin
    if NOT my_package.in_bulk_mode then
        -- do the trigger stuff
    end if;
end;

在调用代码中:

代码语言:javascript
复制
my_package.in_bulk_mode := true;
-- do the bulk insert
my_package.in_bulk_mode := false;
票数 3
EN

Stack Overflow用户

发布于 2010-09-06 23:25:39

触发器在SQL引擎中执行。批量绑定通过减少调用/语句的数量来影响调用语言(pl/sql或任何OCI语言)调用SQL引擎的方式,但不应绕过任何触发器。

(假设您使用触发器向数据库添加验证、日志记录或其他约束,但第三方应用程序只需使用批量操作即可绕过它-这将导致数据损坏和安全问题)。

你的语句级触发器应该触发一次。

您可以“禁用”触发器,方法是让它在执行其他操作之前检查内存中的会话变量,并在批量操作之前显式设置它。

行级触发器仍然会以行为单位触发,这可能会产生更大的影响。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3652297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档