2016-09-15 20 views
0
create or replace procedure data_quality_check(inface_id number default null) is 
v_src_clmn varchar2(400); 
v_tgt_clmn varchar2(400); 
v2_src_value varchar2(400); 
date_chk varchar2(200); 
v2_primary_key varchar2(400); 

CURSOR cur_1 is select temp_field_name,dest_field_name,transform_function from BUNTERFACETEMP_TO_DEST where BUNTERFACEID = inface_id; 
c_curr1 cur_1%ROWTYPE; 

/* Second cursor */ 
TYPE cur_typ IS REF CURSOR; 
cur_2 cur_typ; 


begin 

execute immediate 'truncate table BUNTERFACEDATA_QLTY_CHK'; 

open cur_1; 
loop 
FETCH cur_1 INTO v_src_clmn,v_tgt_clmn,date_chk; 



if date_chk = 'bingle.txt2dt' OR date_chk = 'bingle.txt2dtf1' OR date_chk = 'bingle.txt2dtf2' OR date_chk = 'bingle.txt2dtf3' then 
    -- Open second cursor 
     OPEN cur_2 for 'SELECT C2,' || v_src_clmn || ' from CAT_TEMP_MED' ; 
     LOOP 
     FETCH cur_2 INTO v2_primary_key,v2_src_value; 
     EXIT when cur_1%NOTFOUND; 
     DBMS_OUTPUT.PUT_LINE (v_src_clmn || '-' || v2_src_value || inface_id || date_chk); 
       Insert into BUNTERFACEDATA_QLTY_CHK(pk_key,temp_field_name,BUNTERFACEID,DEST_FIELD_NAME,VALUE,ERROR,date_loaded) values (v2_primary_key, 
      v_src_clmn,inface_id,v_tgt_clmn,v2_src_value,'GOOD ROW',sysdate); 

     IF v2_src_value is NULL then 
      Insert into BUNTERFACEDATA_QLTY_CHK(pk_key,temp_field_name,BUNTERFACEID,DEST_FIELD_NAME,VALUE,ERROR,date_loaded) values (v2_primary_key, 
      v_src_clmn,inface_id,v_tgt_clmn,v2_src_value,'NULL VALUE',sysdate); 
      commit; 
      exit; 
     end if; 
     EXIT when cur_2%NOTFOUND; 
     END LOOP; 
     CLOSE cur_2; 
end if; 

end loop; 
close cur_1; 
end; 

在上述游标中,只要遇到null值,游标就退出。 它的原因是什么? 我从早上挣扎此 任何替代的解决方案为什么游标在列中有空值时退出

以上代码从表BUNTERFACETEMP_TO_DEST取出列名,比校验列值是空或不是。 它是否为null将数据插入到表中,但我所看到的只要null遇到循环出口。

+0

写一个例外,并在这里分享,这样任何人都可以帮助 – XING

+0

我应该在异常中写什么对不起,我认为异常是捕捉错误。 – jackandjill

回答

0

你必须在循环中尽早无条件exit

LOOP 
    ... 
    IF v2_src_value is NULL then 
     Insert into BUNTERFACEDATA_QLTY_CHK ...; 
     commit; 
     **exit;** 
    end if; 

第一次循环遇到一个空,你的代码将退出循环。

相关问题