我正在尝试创建一个触发器来更新验证列哈希。它不一定是 HR,但对于 sql 难题来说它是 hr,表格是:
DESC SINERS
Name Null Type
--------- -------- ------------
LAST_NAME VARCHAR2(20)
SIN NOT NULL NUMBER(9)
VFY NUMBER(2)
这个谜题很棘手,需要一些代码。
大多数薪资系统都有内置的社交有效性检查 保险号码。下面的例子说明了如何手动 检查社会保险号码的有效性:社会保险 号码:123 456 782 去掉校验位(最后一位):2 摘录 第 2、4、6 和 8 位数字: 2 4 6 8 将它们加倍: 4 8 12 16 添加 数字相加:4 + 8 + 1 + 2 + 1 + 6 = 22 将第 1、第 3、第 5 相加 第 7 位:1 + 3 + 5 + 7 = 16 总计:38
我只是创建了这个表来模拟如何从更新或插入语句中获取变量,计算哈希...然后将变量扔回同一个表中。
即...用户运行这个:
insert into siners (last_name, sin) values (smith, 111222333);
or
update siners set sin = 222333444 where last_name = 'smith';
我在网上查找了如何执行此操作的示例,但不清楚。
有没有简单的方法可以做到这一点?也许是一个函数?
首先,我生成了 oracle sql 代码,---我将其中的废话进行了子串,但它有效。
SELECT NVL((NEXT_MULTI - TOTAL_SUM), 0) AS CHECK_VAL
FROM (
SELECT ((
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 1,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 2,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 3,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 4,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 5,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 6,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 7,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 8,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 9,1), 0)
) + ( SUBSTR(SIN, 1, 1) + SUBSTR(SIN, 3, 1) + SUBSTR(SIN, 5, 1) + SUBSTR(SIN, 7, 1)))
"TOTAL_SUM",
CASE WHEN SUBSTR(((
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 1,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 2,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 3,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 4,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 5,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 6,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 7,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 8,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 9,1), 0)
) + ( SUBSTR(SIN, 1, 1) + SUBSTR(SIN, 3, 1) + SUBSTR(SIN, 5, 1) + SUBSTR(SIN, 7, 1))), 2, 1) BETWEEN 1 AND 9 THEN ((10 - (SUBSTR(((
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 1,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 2,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 3,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 4,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 5,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 6,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 7,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 8,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 9,1), 0)
) + ( SUBSTR(SIN, 1, 1) + SUBSTR(SIN, 3, 1) + SUBSTR(SIN, 5, 1) + SUBSTR(SIN, 7, 1))), 2, 1))) + ((
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 1,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 2,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 3,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 4,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 5,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 6,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 7,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 8,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 9,1), 0)
) + ( SUBSTR(SIN, 1, 1) + SUBSTR(SIN, 3, 1) + SUBSTR(SIN, 5, 1) + SUBSTR(SIN, 7, 1)))) END AS NEXT_MULTI
FROM SINERS);
其次,我尝试将代码做成触发器,这就是我目前陷入困境的地方。
我尝试使用 SQL select 创建触发器,但它给了我一个错误,即我无法在正在修改的行上运行选择。 //触发器编译得很好,但是当我对表运行插入时,它抛出了错误。
CREATE OR REPLACE TRIGGER CHK_VFY
AFTER INSERT OR UPDATE OF SIN ON SINERS
FOR EACH ROW
DECLARE
LAST_ONE NUMBER(1);
TOTAL_SUM NUMBER(2);
NEXT_MULTI NUMBER(2);
CHECK_VAL NUMBER(2);
BEGIN
SELECT T_SUM INTO TOTAL_SUM
FROM (
SELECT ((
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 1,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 2,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 3,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 4,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 5,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 6,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 7,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 8,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 9,1), 0)
) + ( SUBSTR(SIN, 1, 1) + SUBSTR(SIN, 3, 1) + SUBSTR(SIN, 5, 1) + SUBSTR(SIN, 7, 1)))
"T_SUM" FROM SINERS );
SELECT LAST1 INTO LAST_ONE
FROM (
SELECT SUBSTR(((
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 1,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 2,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 3,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 4,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 5,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 6,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 7,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 8,1), 0) +
NVL(SUBSTR( (SUBSTR(SIN, 2, 1)*2) || (SUBSTR(SIN, 4, 1)*2) || (SUBSTR(SIN, 6, 1)*2) || (SUBSTR(SIN, 8, 1)*2), 9,1), 0)
) + ( SUBSTR(SIN, 1, 1) + SUBSTR(SIN, 3, 1) + SUBSTR(SIN, 5, 1) + SUBSTR(SIN, 7, 1))), 2, 1) LAST1 FROM SINERS);
IF LAST_ONE BETWEEN 1 AND 9 THEN
NEXT_MULTI := (10 - LAST_ONE) + TOTAL_SUM ;
CHECK_VAL := (NEXT_MULTI - TOTAL_SUM);
ELSE
CHECK_VAL := 0;
END IF;
UPDATE SINERS SET VFY = CHECK_VAL;
END;
经过一些研究,在这个网站和其他网站上,我尝试使用 :new.sin 在更新之前获取变量,但没有运气。它似乎没有更新。因此,我加入了
dbms_output.put_line( ' Updated Check Value = ' || CHECK_VAL );
来尝试验证是否正在收集变量。我根本没有得到任何输出......
使用 :new.variable 代码....它编译得很好,但提示我绑定变量。 “new” 默认值为 null,但我尝试使用变量,因为我在类似示例中看到了一些
reference new as new and old as old
。
CREATE OR REPLACE TRIGGER CAL_VFY
BEFORE INSERT OR UPDATE OF SIN ON SINERS
FOR EACH ROW
DECLARE
SINNO NUMBER(9);
LAST_ONE NUMBER(2);
TOTAL_SUM NUMBER(2);
NEXT_MULTI NUMBER(2);
CHECK_VAL NUMBER(2);
BEGIN
SINNO := :NEW.SIN;
dbms_output.put_line( 'side sin = ' || sinno );
LAST_ONE := SUBSTR(((
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 1,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 2,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 3,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 4,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 5,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 6,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 7,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 8,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 9,1), 0) ) +
( SUBSTR(SINNO, 1, 1) + SUBSTR(SINNO, 3, 1) + SUBSTR(SINNO, 5, 1) + SUBSTR(SINNO, 7, 1))), 2, 1);
TOTAL_SUM := ((
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 1,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 2,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 3,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 4,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 5,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 6,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 7,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 8,1), 0) +
NVL(SUBSTR( (SUBSTR(SINNO, 2, 1)*2) || (SUBSTR(SINNO, 4, 1)*2) || (SUBSTR(SINNO, 6, 1)*2) || (SUBSTR(SINNO, 8, 1)*2), 9,1), 0)
) + ( SUBSTR(SINNO, 1, 1) + SUBSTR(SINNO, 3, 1) + SUBSTR(SINNO, 5, 1) + SUBSTR(SINNO, 7, 1)));
IF LAST_ONE BETWEEN 1 AND 9 THEN
NEXT_MULTI := (10 - LAST_ONE) + TOTAL_SUM ;
CHECK_VAL := (NEXT_MULTI - TOTAL_SUM);
ELSE
CHECK_VAL := 0;
END IF;
CASE
WHEN INSERTING THEN
UPDATE SINERS SET VFY = CHECK_VAL WHERE SIN = :NEW.SIN;
dbms_output.put_line( 'New Check Value = ' || CHECK_VAL );
WHEN UPDATING THEN
UPDATE SINERS SET VFY = CHECK_VAL WHERE SIN = :NEW.SIN;
dbms_output.put_line( ' Updated Check Value = ' || CHECK_VAL );
END CASE;
END;
如果您对如何解决这个问题有任何想法,我洗耳恭听......
感谢您的帮助!
您不应使用 UPDATE 语句来更新要插入/更新的行的列。一旦触发器执行完成,触发它的语句将运行并执行插入/更新。
因此,您应该简单地设置第三列的值。
:new.vfy := check_val;
这里不需要使用CASE语句。
在更新当前行的sql语句中应该使用“where current of”。