我试图按照Mutating Table Compound Trigger的说明,根据子表的id更新父表,避免变异表错误。
我需要获取BLATChildren表中当前记录的父ID(BLATranscriptId),然后 更新子记录后,我需要提取符合我标准的当前计数并在父表BLATranscript上执行更新。
已经解决了这个错误 - 我的代码中的“AFTER EACH ROW”部分出现了我的绑定变量“transcriptID”错误的错误。我已经验证BLATChildren.BLATranscriptId是否存在且拼写正确。 解决方案是在每个行之后更改为AFTER STATEMENT。
NEW ISSUE - 触发器正在更新父表中的每条记录,而不仅仅是匹配的父记录。
非常感谢任何帮助。谢谢。
$('#btnSaveAs').on('click', function () {
dialog.dialog( "open" );
});
答案 0 :(得分:0)
您需要为每个行部分收集:new.blaTranscriptid
int PL / SQL表
以及将使用此PL / SQL表执行更新的语句部分
像:
CREATE OR REPLACE TRIGGER transcript_after_update
FOR UPDATE of enrollmentStatus,completionDate on blatChildren
COMPOUND TRIGGER
TYPE transcriptIDs_t IS TABLE OF blatChildren.blaTranscriptid%TYPE;
transcriptID transcriptIDs_t := transcriptIDs_t();
BEFORE EACH ROW IS
BEGIN
transcriptID.extend;
transcriptID(transcriptID.count) := :new.blaTranscriptid;
END BEFORE EACH ROW;
AFTER STATEMENT IS
BEGIN
FOR i IN 1..transcriptID.COUNT
LOOP
update BLATranscript SET (enrollmentStatus, completionDate) = (select 'C',sysdate from dual)
where id in (select blat.id from BLATranscript blat
inner join BlendedActivity bla on blat.blendedactivityid=bla.id
where blat.id = transcriptID(i) and minCompletion<=(
select count(countForCompletion) as total from blatChildren blac
inner join BlendedActivityMembership bam on blac.childActivityId=bam.childActivityId
where completionDate>=sysdate-acceptPrevWork
and blat.id=transcriptID(i)
and blac.enrollmentStatus='C'));
END LOOP;
END AFTER STATEMENT;
END;
/