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がループ出口で見つかると直ぐです。
誰かが助けることができるように、例外を書き込んでそれをキャッチしてここに共有してください。 – XING
例外で書かなければならないもの申し訳ありませんが、例外はエラーを捕捉していると思います。 – jackandjill