使用触发器更新状态
主表:id status
1 注销
从表:id status rid
1 注销 1
2 注销 1
3 注销 1
4 注销 1
5 注销 1当从表里有一个正常的,主表状态为正常,从表全为注销时,主表为注销,我想根据从表的状态来更新,但总是提示触发器错误 IF :NEW.D401_10 = '注销' THEN
--统计从表的所有记录
SELECT COUNT(id)
INTO V_MEMBER_COUNT
FROM 从表
WHERE rid = :OLD.id;
--统计从表状态为 注销的记录
SELECT COUNT(id)
INTO V_TEMP_COUNT
FROM 从表
WHERE id = :OLD.rid
AND rid = '注销';
--当从表引用主表的记录个数全为注销时,主表更新为注销
IF V_MEMBER_COUNT = V_TEMP_COUNT THEN
UPDATE D301_DS_NEXT A SET D301_20 = '注销' WHERE D301_02 = :OLD.D401_00;
END IF;
END IF;
主表:id status
1 注销
从表:id status rid
1 注销 1
2 注销 1
3 注销 1
4 注销 1
5 注销 1当从表里有一个正常的,主表状态为正常,从表全为注销时,主表为注销,我想根据从表的状态来更新,但总是提示触发器错误 IF :NEW.D401_10 = '注销' THEN
--统计从表的所有记录
SELECT COUNT(id)
INTO V_MEMBER_COUNT
FROM 从表
WHERE rid = :OLD.id;
--统计从表状态为 注销的记录
SELECT COUNT(id)
INTO V_TEMP_COUNT
FROM 从表
WHERE id = :OLD.rid
AND rid = '注销';
--当从表引用主表的记录个数全为注销时,主表更新为注销
IF V_MEMBER_COUNT = V_TEMP_COUNT THEN
UPDATE D301_DS_NEXT A SET D301_20 = '注销' WHERE D301_02 = :OLD.D401_00;
END IF;
END IF;
oracle 规定after 触发器是不能update触发表的
将你after改为before是试试
create or replace trigger trigger_name
before insert on 从表
for each row
begin
....
....
end;
+1
IF :NEW.D401_10 = '注销' THEN
--统计从表状态不为注销的记录
SELECT COUNT(id)
INTO V_TEMP_COUNT
FROM 从表
WHERE id = :OLD.rid
AND rid <> '注销';
--当从表引用主表的记录个数全为注销时,主表更新为注销
IF V_TEMP_COUNT = 0 THEN
UPDATE D301_DS_NEXT A SET D301_20 = '注销' WHERE D301_02 = :OLD.D401_00;
END IF;
END IF;