oracle触发器问题:hz_parties发生了变化 触发器/函数不能读取。

CREATE OR REPLACE TRIGGER venderAutoInsert
after INSERT
ON ar.hz_parties
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare
org_type varchar2;

BEGIN
select party_type into org_type from hz_parties hz,pom_party_preferences p where hz.party_id=:new.party_id and party_type='ORGANIZATION' and preference_name='TRADING_PARTNER_TYPE'
and hz.party_id = p.party_id and preference_value in ('SELLER','BUYER&SELLER') ;
if (org_type is not null)
{
insert into venderinfor
(vi_excid,vi_excname,vi_sort,vi_usname,vi_date,vi_lastupdate_ususername,vi_lastupdate_usname,vi_lastupdatedate)
VALUES(:NEW.party_id,:NEW.party_name,'','APPS',sysdate-365*30,'APPS','APPS',sysdate-365*30)
};
END;
我简要说明下需求和逻辑:涉及到3个表:新注册信息表venderinfor,老注册信息表hz_parties,注册信息分类表pom_party_preferences。要求每次向hz_parties insert数据的时候,对数据进行检查,如果数据的party_type是'ORGANIZATION' 且preference_value in ('SELLER','BUYER&SELLER'),则向venderinfor表里也插入相应的一些数据。
party_type 和preference_value 这两个字段都在pom_party_preferences表里面。
刚才看其他帖子说 逐行读取的时候不能解析当前表。那我该怎么办实现我的逻辑呢?

像这样写,报错把错误代码贴来。
--你要确定你的select 语句返回唯一的结果集,否则就要用游标了。
CREATE OR REPLACE TRIGGER VENDERAUTOINSERT
AFTER INSERT ON AR.HZ_PARTIES
FOR EACH ROW
DECLARE
ORG_TYPE VARCHAR2(20);
BEGIN
SELECT PARTY_TYPE
INTO ORG_TYPE
FROM HZ_PARTIES HZ, POM_PARTY_PREFERENCES P
WHERE HZ.PARTY_ID = :NEW.PARTY_ID
AND PARTY_TYPE = 'ORGANIZATION'
AND PREFERENCE_NAME = 'TRADING_PARTNER_TYPE'
AND HZ.PARTY_ID = P.PARTY_ID
AND PREFERENCE_VALUE IN ('SELLER', 'BUYER&SELLER');
IF ORG_TYPE IS NOT NULL THEN
INSERT INTO VENDERINFOR
(VI_EXCID, VI_EXCNAME, VI_SORT, VI_USNAME, VI_DATE,
VI_LASTUPDATE_USUSERNAME, VI_LASTUPDATE_USNAME, VI_LASTUPDATEDATE)
VALUES
(:NEW.PARTY_ID, :NEW.PARTY_NAME, '', 'APPS', SYSDATE - 365 * 30,
'APPS', 'APPS', SYSDATE - 365 * 30);
END IF;
END;
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-29
你这个需求很简单啊
create or replace trigger venderAutoInsert after insert on a_hz_parties for each row
begin
if :new.party_type='ORGANIZATION' and :new.preference_value in ('SELLER','BUYER&SELLER') then
insert into venderinfor values(。。。。);
end if;
end venderAutoInsert;追问

不是这样简单的 能告诉我qq么 我跟你说一下

追答

你可以把if (org_type is not null)这个判断换成
begin
select ...into..;
exception
when no_data_found then
insert....;
end;
试试 我qq540259380

本回答被提问者采纳
相似回答