我已经创建了以下函数来检查日期是否以有效格式存在。为什么没有数据插入这个存储的pl/sql
create or replace function dt_valid(p_dstrng in varchar2,
p_dfmt in varchar2) return boolean is
v_dtval date;
begin
v_dtval := TO_DATE (p_dstrng, p_dfmt);
return True;
exception
when OTHERS then
return False;
end;
该函数是从PL被叫/ SQL 该过程从表tmp_to_dest获取的元数据信息,并且如果它获取字段是日期(通过柱transform_function =“txt2dtf”标识)它检查格式“DD-MON -YY'表中的该列的所有行都对表temp_med中的所有列都相同。如果该格式不存在,则应将行插入data_quality_chk中。
create or replace procedure data_quality_check (id number default null) as
X varchar2(4000);
begin
for o in (select temp_field_name,dest_field_name,transform_function from TMP_TO_DEST)
loop
if o.transform_function = 'text2df' then
/// fetches the column name from metadata table TMP_TO_DEST and than loop through for each column to check for valid date
for m in (select o.temp_field_name temp_field_name from TEMP_COLUMNS)
loop
if not dt_valid(m.temp_field_name, 'DD-MON-YY') then
execute immediate 'insert into data_quality_chk values(X,''1'',''1'',''1'',''1'') ' ;
commit;
END IF;
end loop;
end if;
end loop;
end data_quality_check;
/// fetches the column name from metadata table TMP_TO_DEST and than loop through for each column to check for valid date
如果我执行上面的过程,没有任何输出显示没有任何行插入。 我在这里做错了什么?
所有的人都可以通过看它是它充满了像一个日期验证功能奇怪的事情被应用到列名告诉(或“场”的名字,不管那些是),冗余'执行immediate'可不工作,嵌套循环中的commit,以及为了可读性而格式化代码的尝试很少。也许'TMP_TO_DEST'中没有数据?也许真正的程序有'when others'异常处理程序?谁知道? –