SQL实现复杂的数据验证



我有一个包含数字的字段,如何在插入时对该数字进行复杂的验证?

我已经用java实现了验证算法,只是想知道如何";翻译它";到SQL。就像我用插入的数字进行一些计算一样,如果计算结果与预定结果不匹配,我想拒绝该条目。我该怎么做?

我假设我需要在字段上使用Check Constraint,但我如何将我的验证算法合并到约束中?

我的算法看起来像这个

int s=0;
for (int i = 0; i < 10; i++)
{
s+=n%10;
n/=10;
}
if(n==s)
//Good Value

其中n最初是我要插入的值。

由于此检查很复杂,您需要在PL/SQL中转换它,并在BEFORE INSERT和/或BEFORE UPDATE触发器中添加此逻辑。

假设您的表名为MY_TABLE,并包含一个字段MY_FIELD,该字段为NUMBER数据类型:

CREATE OR REPLACE TRIGGER  TRIGGER_VALIDATE_N
BEFORE  
insert or update on MY_TABLE
for each row  
s NUMBER := 0;
n NUMBER;
begin  
n := :OLD.MY_FIELD;
FOR i IN 0..10 LOOP
s := MOD(n,10);
n := n/10;
END LOOP;
IF n = s THEN
--Good Value
null;
ELSE
--Wrong Value raise an error
RAISE_APPLICATION_ERROR(-20000, TO_CHAR(:OLD.MY_FIELD)||' is a wrong value for MY_TABLE.MY_FIELD.');
END IF;
end;  
/

最新更新