首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复合触发器只触发一次

复合触发器只触发一次
EN

Stack Overflow用户
提问于 2021-11-25 09:19:56
回答 2查看 45关注 0票数 0

我有一个启用ORDS的模式,它接受批量JSON记录,然后一个一个地分割它们,然后一个一个地插入到UEM表中。

我尝试创建一个触发器,该触发器获取最后插入的行的id,并使用该值插入另一个表。问题是,下面的触发器只获取和插入最后插入的行的id,并且它只执行1插入。

将成为更具体的

  1. ORDS获得一个由4条记录组成的大容量JSON有效负载。
  2. POST处理程序启动一个过程,该过程将这4条记录按行拆分,然后使用“按级别连接”,立即将这些记录作为4行插入UEM表的CLOB列。还有一个ID列,它被自动创建和递增。
  3. 在并行中,我还想获取这些行的ID,并在另一个表insert中使用它。我在下面创建了复合触发器,但是这个触发器只检索最后一个记录的ID,并且只插入一行。

你觉得它为什么会这样?最后,程序“插入”了4条记录。

代码语言:javascript
复制
CREATE OR REPLACE TRIGGER TEST_TRIGGER5
FOR INSERT ON UEM
COMPOUND TRIGGER
    lastid NUMBER;
    AFTER STATEMENT IS
        BEGIN
            SELECT MAX(ID) INTO lastid FROM UEM;
            INSERT INTO SPRINT1 (tenantid, usersessionid, newuser, totalerrorcount, userid) VALUES ('deneme', 'testsessionid', 'yes', lastid, 'asdasfqwqwe');
        END AFTER STATEMENT;
END TEST_TRIGGER5;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-25 09:31:17

使用“”将这些内容插入到UEM表的CLOB列中,作为4个单独的行。

您有一个INSERT语句,它插入4行。

  1. 在并行中,我还想获取这些行的ID,并在另一个表insert中使用它。我在下面创建了复合触发器,但是这个触发器只检索最后一个记录的ID,并且只插入一行。

你觉得它为什么会这样?最后,程序“插入”了4条记录。

它可能插入了4个行,,但是只有一个语句,您使用的是AFTER STATEMENT触发器。如果希望为每一行运行它,则需要使用行级触发器。

代码语言:javascript
复制
CREATE OR REPLACE TRIGGER TEST_TRIGGER5
AFTER INSERT ON UEM
  FOR EACH ROW
BEGIN
  INSERT INTO SPRINT1 (tenantid, usersessionid, newuser, totalerrorcount, userid)
  VALUES ('deneme', 'testsessionid', 'yes', :NEW.id, 'asdasfqwqwe');
END TEST_TRIGGER5;
/

db<>fiddle https://dbfiddle.uk/?rdbms=oracle_18&fiddle=c565c1da76cad5b871ee5c3a2680a153

票数 0
EN

Stack Overflow用户

发布于 2021-11-25 09:27:47

为什么?因为它是语句级别的触发器。如果您希望为每一行触发它,您将--显然--使用行级别的触发器,该触发器具有

代码语言:javascript
复制
for each row

条款。

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

https://stackoverflow.com/questions/70108540

复制
相关文章

相似问题

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