1 前言
唯一值检查,在许多人眼中是一个简单而又不能再简单的问题,但是FORMS中,由于OracleD
eveloper体系架构的问题,成为开发人员的一块心病。
当然,进行唯一值检查的方式多种多样,包括对数据块的轮询或利用表变量实现,但这些方
法都有相同的弊病=>效率低下和实现方法过于繁杂。
本文利用FORMS的POST命令和后台Select Count语句实现唯一值检查,为各位同仁提供多一种选择的余地。
2 技术要点
2.1 POST
POST命令间将前台的数据传到后台,但是不进行COMMIT动作,由于在同一个SEASON,所以Select Count语句可以对未Commit_form的数据进行检查
2.2 受限过程的解决方法
由于POST是受限过程,无法在BLOCK的When_Valid_Record中使用,本文利用Timer实现POST过程。
即:When_Valid_Record创建Timer,由Timer执行POST的动作。
2.3 Select Count
此语句不必多说,就是判定某数据是否重复
3 实例参考
3.1 创建数据表
create table TESTCHECKUNIQUE
(
T1 VARCHAR2(20) Primary Key,
T2 VARCHAR2(20)
);
--设定T1为要检查的唯一值
3.2 FORMS
3.2.1 创建表级的When_Timer_EXPired,对数据进行POST动作
Declare
Begin
IF Upper(Get_Application_Property(TIMER_NAME)) = Upper('Timer_Post') THEN
Post;
END IF;
End;
3.2.2 创建数据块级的When_Valid_Record,创建Timer
Declare
Timer_Post Timer;
Begin
Timer_Post:=Create_Timer('Timer_Post', 5, NO_REPEAT);
End;
3.2.3 创建数据项级的When_Valid_Item,对数据进行检查性检查
Declare
L_Count Number;
Begin
Select Count(0)
Into L_Count
From TestCheckUnique
Where T1=:TestCheckUnique.T1;
If L_Count>0 Then
Message('字段输入重复值');
Raise Form_Trigger_Failure;
End If;
End;