Oracle Form判断表单数据重复方法
在form builder开发过程中,在前台输入表单数据时,可用此段代码判断输入的表单数据是否重复
第一种方法(嵌套表):
PROCEDURE check_data IS
--定义三维记录用作三维数组,分别存放工单号、记录行、栏位
type v_tab_rec is record(
ref_name varchar2(255),
ref_record number,
ref_item varchar2(255));TYPE V_TAB IS TABLE OF v_tab_rec; --索引表v_tab_temp V_TAB := V_TAB(); --初始化嵌套表,嵌套表必须初始化才能使用,此時嵌套表為空l_current_row varchar2(255);
l_record NUMBER :=0;
l_count number :=0;
l_count_num number;
l_source_ref varchar2(55);begingo_block('SO_PRICE_D');l_current_row := :system.cursor_record;first_record;loopl_record := l_record + 1;if :SO_PRICE_D.partno is not null thenl_count := l_count + 1;v_tab_temp.EXTEND; --执行extend函数,为数组增加一个null元素 v_tab_temp(l_count).ref_name := :SO_PRICE_D.partno;v_tab_temp(l_count).ref_record := l_record;v_tab_temp(l_count).ref_item := 'SO_PRICE_D.partno';end if;EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';next_record;end loop;go_record(l_current_row);l_count_num := l_count;for m in 1..v_tab_temp.count loop l_source_ref := v_tab_temp(m).ref_name;for i in reverse 1..v_tab_temp.count loop if l_source_ref = v_tab_temp(i).ref_name and i != m thengo_block('SO_PRICE_D');
go_record(v_tab_temp(i).ref_record );
go_item(v_tab_temp(i).ref_item);msg('料号: '||l_source_ref||'在画面记录中第'||v_tab_temp(m).ref_record||'行和'||v_tab_temp(i).ref_record||'行存在重复,请确认');raise form_trigger_failure;exit;end if;end loop;end loop;END;
第二种方法:
PROCEDURE DEL_SAME
IS
temp VARCHAR2(255);
num1 NUMBER := 1;
num2 NUMBER := 2;
BEGINIF :SO_PRICE_D.partno IS NOT NULLTHENGO_BLOCK ('SO_PRICE_D');FIRST_RECORD;LOOPtemp := :SO_PRICE_D.partno;num1 := num1 + 1;GO_RECORD (num2);LOOPIF temp = :SO_PRICE_D.partnoTHENmsg ('料号重复');RAISE form_trigger_failure;END IF;EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';NEXT_RECORD;END LOOP;num2 := num2 + 1;GO_RECORD (num1);EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';END LOOP;END IF;
END;