2016-07-24 2 views
-1

Вот код:Ошибка генерируется во время выполнения триггеров

CREATE OR REPLACE TRIGGER "TRI_MUD_PARAMETER_VW_INS" 
INSTEAD of Insert ON MUD_PARAMETER_VW for each row 
DECLARE 
    v_id           number(10); 
    v_borehole_id        number(10); 
begin 
     select SEQ_ID.nextval into v_id from dual; 
     select id into v_borehole_id from EPI_BOREHOLE where UBHI=:new.UBHI; 

     insert into EPI_FER_MUD_PARAMETERS (ID,LOG_DATE,TOP_DEPTH,BOTTOM_DEPTH,MUD_TYPE,MUD_WT_DENSITY,VISCOSITY,PH,RES_RM,RES_RMF,RES_RMC,FLUID_LOSS, BHT,BHT_UNIT,BHT_DEPTH,SERVICE_COMPANY,HOLE_SIZE,REMARKS,BOREHOLE_ID,INSERT_DATE,INSERT_NAME,UPDATE_DATE,UPDATE_NAME) 
     values (v_id,:new.LOG_DATE,:new.TOP_DEPTH,:new.BOTTOM_DEPTH,:new.MUD_TYPE, :new.MUD_WT_DENSITY,:new.VISCOSITY,:new.PH,:new.RES_RM, :new.RES_RMF,:new.RES_RMC,:new.FLUID_LOSS, :new.BHT,:new.BHT_UNIT,:new.BHT_DEPTH,:new.SERVICE_COMPANY,:new.HOLE_SIZE,:new.REMARKS, v_borehole_id,sysdate,USER,sysdate,USER); 
    END; 

END; 

Ошибка: -

ORA-01403: no data found 
ORA-06512: at "FER_EPINET.TRI_MUD_PARAMETER_VW_INS" 
ORA-04088: error during execution of trigger 'FER_EPINET.TRI_MUD_PARAMETER_VW_INS' 

ответ

2

«нет данных не найдено» ошибка будет предположить, что линия, которая терпит неудачу это :

select id into v_borehole_id from EPI_BOREHOLE where UBHI = :new.UBHI; 

Это имело бы место, если ни одна строка не соответствует условию UBHI = :new.UBHI.

Есть много способов исправить это. Непонятно, что вы можете сделать. Вот одна идея:

select max(id) into v_borehole_id 
from EPI_BOREHOLE 
where UBHI = :new.UBHI; 

Это присвоит значение NULL. Это позволит присвоить значение 0:

select coalesce(max(id), 0) into v_borehole_id 
from EPI_BOREHOLE 
where UBHI = :new.UBHI; 
+0

OOH ..... Thats большой .it работал –

+0

поблагодарить у сэр .... Ь одну вещь я хочу знать .... без использования макс(). ... y код бросает ошибку ?? –

+3

Думаю, он вам сказал. Выбор не найден. Это вызывает исключение, которое не обрабатывается в коде. – DCookie

Смежные вопросы