【发布时间】:2015-03-18 18:16:59
【问题描述】:
我创建了一个触发器,它会根据顺序在每次插入新记录时自动增加 id。像这样:
create sequence test_seq
start with 1
increment by 1
nomaxvalue;
--drop trigger test_trigger;
create or replace trigger test_trigger
before insert on myTable
for each row
begin
select test_seq.nextval into :new.tab_id from dual;
end;
但是,我想改为插入行索引的阶乘。我怎么能做到这一点?
编辑:
create or replace trigger test_trigger
after insert on myT
for each row
begin
select fac(test_seq.nextval) into :new.tab_id from dual;
end;
添加了可以正常工作的 fac 函数:
create or replace function fac(n in number)
return number
is
v number :=1;
begin
for i in 1..n
loop
v :=v * i;
end loop;
return v;
结束;
但我仍然只在表格中看到 1,2,3,4 而不是 1,2,6,24...
【问题讨论】:
-
那么你必须在其他地方做一个阶乘函数。然后将序列的值传递给这个函数,返回的值将被分配到newid var中,然后插入到表中。
-
您需要删除
BEFORE触发器并将AFTER触发器(使用阶乘函数)更改为BEFORE触发器。这样做:AFTER触发器中的select fac(test_seq.nextval) into :new.tab_id from dual;实际上并没有为新插入的列设置值。
标签: sql oracle triggers sequence factorial