2016-09-15 8 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値に達するとすぐにカーソルが終了します。 その理由は何ですか? Iこの ため朝から任意の代替ソリューションなぜ列に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; 

ループがヌルに遭遇した最初の時間を、あなたのコードは、ループを終了します。

関連する問題