如果在 Oracle SQL 中插入 null,则设置一个值
Set a value if null inserted in Oracle SQL
我创建了一个触发器,它会自动将第一列的值设置为后续的阶乘数。但是,另外,我想将第二列的值设置为第一个增加 5 的值,以防插入空值。这是我现在尝试的方法:
create or replace trigger test_tr
before insert on myT
for each row
begin
IF :new.mNumb is null
THEN
UPDATE myT
SET mNumb = :new.tab_id + 5;
END IF;
SELECT fac(test_seq.NEXTVAL)
INTO :new.tab_id
FROM dual;
end;
但显然我遗漏了一些东西,因为没有任何反应,插入的 null 仍然是空的。
不要重新更新触发器中的 table,直接更新给定的行:
...
IF :new.mNumb is null
THEN
:new.mNumb = :new.tab_id + 5;
END IF;
...
据我所知,一切都按预期进行,使用 Emmanuel 的建议删除更新 stmt。这是我使用的测试用例:
drop table test;
create table test (col1 number, col2 number);
create trigger test_trg
before insert on test
for each row
begin
IF :new.col2 is null
THEN
:new.col2 := :new.col1 + 5;
END IF;
:new.col1 := dbms_random.value;
end;
/
insert into test values (1, 1);
insert into test values (1, null);
insert into test values (null, null);
commit;
select * from test;
产生以下输出:
COL1 COL2
---------- ----------
.617580128 1
.030570358 6
.555066268
也许如果你在处理 null col2 场景之前设置 :new.col1,那会更适合你?这样做会产生:
COL1 COL2
---------- ----------
.302670917 1
.024927489 5.02492749
.667568400 5.66756840
我创建了一个触发器,它会自动将第一列的值设置为后续的阶乘数。但是,另外,我想将第二列的值设置为第一个增加 5 的值,以防插入空值。这是我现在尝试的方法:
create or replace trigger test_tr
before insert on myT
for each row
begin
IF :new.mNumb is null
THEN
UPDATE myT
SET mNumb = :new.tab_id + 5;
END IF;
SELECT fac(test_seq.NEXTVAL)
INTO :new.tab_id
FROM dual;
end;
但显然我遗漏了一些东西,因为没有任何反应,插入的 null 仍然是空的。
不要重新更新触发器中的 table,直接更新给定的行:
...
IF :new.mNumb is null
THEN
:new.mNumb = :new.tab_id + 5;
END IF;
...
据我所知,一切都按预期进行,使用 Emmanuel 的建议删除更新 stmt。这是我使用的测试用例:
drop table test;
create table test (col1 number, col2 number);
create trigger test_trg
before insert on test
for each row
begin
IF :new.col2 is null
THEN
:new.col2 := :new.col1 + 5;
END IF;
:new.col1 := dbms_random.value;
end;
/
insert into test values (1, 1);
insert into test values (1, null);
insert into test values (null, null);
commit;
select * from test;
产生以下输出:
COL1 COL2
---------- ----------
.617580128 1
.030570358 6
.555066268
也许如果你在处理 null col2 场景之前设置 :new.col1,那会更适合你?这样做会产生:
COL1 COL2
---------- ----------
.302670917 1
.024927489 5.02492749
.667568400 5.66756840