我有一个包含数字的字段,如何在插入时对该数字进行复杂的验证?
我已经用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;
/