在Trigger中使用SELECT

时间:2017-10-24 11:15:13

标签: sql database oracle triggers

客户需要触发他的新管理工具。它到目前为止工作,但现在他想从另一个表中获取值。

这是什么意思?仔细看看(工作)触发器:

CREATE OR REPLACE TRIGGER reldb_export_T_Import3_In
AFTER UPDATE OR INSERT OR DELETE ON infor.RELDB
FOR EACH ROW

DECLARE KST varchar(1000 BYTE);

  BEGIN

    IF (:new.ZUST = 4 AND :old.ZUST = 3 AND :old.SAINT = 60)
    THEN
      INSERT INTO infor2infoboard.T_Import3_In
        (Idx, Timestamp, ObjectId, Text, RowUid, GroupName, GroupIndex, PredTimeCondition, PredGapValue, Service, ReqQuan, ReqDur,
          Efficiency, BackColor, HighlightColor, Brightness, CellOffsetY, Fixed, Font, FontColor, Height, EarliestStart, LastDeliveryDate, RoleId,
          StatusIds, WithReservation, LastChange, LastEditedBy, Opacity, IsProcess, CheckSymbol, Link, Priority, IconPath, Adress, CA1, CA2,
          CA3, CA4, CA5, CA6, CA7, CA8, CA9, CA10, CA11, CA12, CA13, CA14, CA15, 
          CA16, CA17, CA18, CA19, CA20, CA21, CA22, CA23, CA24, CA25,
          CA26, CA27, CA28, CA29, CA30, CA31, CA32)
      VALUES
        (seq_t_import3_in.nextval, sysdate, :old.RNR, NULL, CASE WHEN :NEW.KST = '3710' THEN 'Pool TB-M 1;Pool TB-M 2;Pool TB-M 3;Pool TB-M 4;Pool TB-M 5' ELSE KST END, :old.Komm, NULL, NULL, NULL, :old.KTXT, :old.TA_4, NULL,
          NULL, CASE WHEN :new.MNR = '3740' THEN 'GREEN' WHEN :new.MNR != '3740' THEN 'BLUE' END, NULL, NULL, NULL, NULL, NULL, NULL, NULL, :old.TERM_2, :old.TERM_1, NULL, 
          NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
          NULL, SUBSTR(:old.ANR, 1, 10), :old.KOMM, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
          NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
          NULL, NULL, NULL, NULL, NULL, NULL, NULL);
    END IF;......

现在他想用选定的值替换最后一个NULLS。

声明应如下所示:

SELECT KTXT FROM RELDB WHERE ANR = :old.ANR and SAEXT = 'H';

所以,例如:

NULL, (SELECT KTXT FROM RELDB WHERE ANR = :old.ANR and SAEXT = 'H';), SUBSTR(:old.ANR, 1, 10), :old.KOMM, NULL

我的问题:我收到错误,触发器无法发现一些变化。触发器不会被解雇。

那么有没有人知道我如何使用或如何获得选定的值(来自触发器正在收听的相同(!!!)表?

感谢您的帮助:)。

干杯, DOM

1 个答案:

答案 0 :(得分:0)

在Oracle中,您无法从正在更改的同一个表中进行选择,这是变异表错误。见https://asktom.oracle.com/pls/apex/f?p=100:11:0::::p11_question_id:9579487119866