@H_502_4@
当火更新查询时
update JISPBILCORBILLINGPRD501.TBLMACCOUNTADDRESS set Address1='NehateSir',stateid='STT0002' where accountid='ACC000000068'
那个时候发生这个错误
Error starting at line 4 in command: update JISPBILCORBILLINGPRD501.TBLMACCOUNTADDRESS set Address1='NehateSir',stateid='STT0002' where accountid='ACC000000068' Error report: sql Error: ORA-01403: no data found ORA-06512: at "WOM.TRGBILLINGADDRESS",line 10 ORA-04088: error during execution of trigger 'WOM.TRGBILLINGADDRESS' 01403. 00000 - "no data found" *Cause: *Action:
下面是触发码
create or replace TRIGGER TRGBILLINGADDRESS AFTER INSERT OR DELETE OR UPDATE ON jispbilcorbillingprd501.TBLMACCOUNTADDRESS FOR EACH ROW DECLARE add1 varchar2(200) ; add2 varchar2(200); cityid varchar2(200); stateid varchar2(200); pincd varchar2(200); parlcid varchar2(12); BEGIN select endbcirclename into parlcid from jispbilcorbillingprd501.tblmaccountprofile where accountid =:NEW.accountid; SELECT address1,address2,city_id,state_id,pincode INTO add1,add2,cityid,stateid,pincd FROM wom.tbltaddress ta WHERE ta.ID IN (SELECT vbac.billing_address_id FROM wom.vw_billaddresschange vbac,wom.tbltaddress ita WHERE vbac.billing_address_id = ita.ID AND vbac.lcid = parlcid ); IF add1 = :new.address1 AND add2 = :new.address2 AND cityid = :new.cityid AND stateid = :new.stateid AND pincd = :new.zip THEN dbms_output.put_line('Address Already Exist in tbltaddress table'); ELSE UPDATE wom.tbltaddress ta SET ta.address1 = :new.address1,ta.address2 = :new.address2,ta.city_id = :new.cityid,ta.country_id = 'CTR0001',ta.state_id = :new.stateid,ta.pincode = :new.zip WHERE ta.ID IN (SELECT vbac.billing_address_id FROM wom.vw_billaddresschange vbac,wom.tbltaddress ita WHERE vbac.billing_address_id = ita.ID AND vbac.lcid = parlcid ); END IF; END;@H_502_4@
解决方法
这个查询:
SELECT address1,pincode INTO add1,pincd FROM wom.tbltaddress ta WHERE ta.ID IN (SELECT vbac.billing_address_id FROM wom.vw_billaddresschange vbac,wom.tbltaddress ita WHERE vbac.billing_address_id = ita.ID AND vbac.lcid = parlcid );
你应该抓住这个例外:
BEGIN SELECT address1,pincode INTO add1,pincd FROM wom.tbltaddress ta WHERE ta.ID IN ( SELECT vbac.billing_address_id FROM wom.vw_billaddresschange vbac,wom.tbltaddress ita WHERE vbac.billing_address_id = ita.ID AND vbac.lcid = parlcid ); EXCEPTION WHEN no_data_found THEN NULL; -- or do anything useful END;
如果您使用的是Oracle 9i或更高版本,请使用MERGE语句,而不是在触发器中实现UPSERT.
@H_502_4@ @H_502_4@