create or replace trigger tg_tt before insert on tt for each row begin :new.col1:='XXX'; :new.col2:='XXX'; .... end tg_tt;
可能是我没表达清楚,我现在是先插入一行数据,然后update插入的这一行的某几列。
create or replace trigger tg_tt after insert on tt for each row begin :new.col1:='XXX'; :new.col2:='XXX'; .... end tg_tt;
我自己写的SQL如下,麻烦大家帮忙看看,有什么问题。create or replace trigger set_booknumber before insert on app_assetcustominfo60 for each row declare num number(10) begin SELECT SERIALNUMBER INTO num FROM app_bookserialnum; IF num< 0 then num =1; else num = num+1; end if update app_bookserialnum set SERIALNUMBER = num; new.BOOKSERIALNUM = num; end set_booknumber; commit;
SELECT SERIALNUMBER INTO num FROM app_bookserialnum; 这是什么意思,返回记录数吗 app_bookserialnum和app_assetcustominfo60 不是一个表? SELECT SERIALNUMBER INTO num FROM app_bookserialnum; 如果记录条数不为1会出错 num =1; 赋值要用num:=1 new前要加: 还有';'号 错误很多 你描述清楚,再试着帮你改
create or replace trigger set_booknumber before insert on app_assetcustominfo60 for each row
begin IF :new.SERIALNUMBER< 0 then :new.SERIALNUMBER :=1; else :new.SERIALNUMBER:=:new.SERIALNUMBER+1; end if; end set_booknumber;
SELECT SERIALNUMBER INTO num FROM app_bookserialnum; 这是什么意思,返回记录数吗 app_bookserialnum表只有一条记录,用来存放一个数字,我的本意是要取得SERIALNUMBER 列的值。 app_bookserialnum和app_assetcustominfo60 不是一个表? app_bookserialnum和app_assetcustominfo60不是一个表,要从app_bookserialnum中取得SERIALNUMBER 列的值,加1后插入app_assetcustominfo60表的BOOKSERIALNUM列,(BOOKSERIALNUM列的值更新没有在insert语句中,需要将BOOKSERIALNUM列的值加入insert语句中。)同时更新app_bookserialnum表的SERIALNUMBER 列的值。
那么你稍微修改下原句的语法错误试试create or replace trigger set_booknumber before insert on app_assetcustominfo60 for each row declare num number; begin SELECT SERIALNUMBER INTO num FROM app_bookserialnum; IF num< 0 then num :=1; else num := num+1; end if; update app_bookserialnum set SERIALNUMBER = num; :new.BOOKSERIALNUM := num; end set_booknumber;
before insert
on tt
for each row
begin
:new.col1:='XXX';
:new.col2:='XXX';
....
end tg_tt;
after insert
on tt
for each row
begin
:new.col1:='XXX';
:new.col2:='XXX';
....
end tg_tt;
before insert
on app_assetcustominfo60
for each row
declare num number(10)
begin
SELECT SERIALNUMBER INTO num FROM app_bookserialnum;
IF num< 0 then
num =1;
else
num = num+1;
end if
update app_bookserialnum set SERIALNUMBER = num;
new.BOOKSERIALNUM = num;
end set_booknumber;
commit;
这是什么意思,返回记录数吗
app_bookserialnum和app_assetcustominfo60
不是一个表?
SELECT SERIALNUMBER INTO num FROM app_bookserialnum;
如果记录条数不为1会出错
num =1;
赋值要用num:=1
new前要加:
还有';'号
错误很多
你描述清楚,再试着帮你改
before insert
on app_assetcustominfo60
for each row
begin
IF :new.SERIALNUMBER< 0 then
:new.SERIALNUMBER :=1;
else
:new.SERIALNUMBER:=:new.SERIALNUMBER+1;
end if;
end set_booknumber;
这是什么意思,返回记录数吗
app_bookserialnum表只有一条记录,用来存放一个数字,我的本意是要取得SERIALNUMBER 列的值。
app_bookserialnum和app_assetcustominfo60
不是一个表?
app_bookserialnum和app_assetcustominfo60不是一个表,要从app_bookserialnum中取得SERIALNUMBER 列的值,加1后插入app_assetcustominfo60表的BOOKSERIALNUM列,(BOOKSERIALNUM列的值更新没有在insert语句中,需要将BOOKSERIALNUM列的值加入insert语句中。)同时更新app_bookserialnum表的SERIALNUMBER 列的值。
before insert
on app_assetcustominfo60
for each row
declare
num number;
begin
SELECT SERIALNUMBER INTO num FROM app_bookserialnum;
IF num< 0 then
num :=1;
else
num := num+1;
end if;
update app_bookserialnum set SERIALNUMBER = num;
:new.BOOKSERIALNUM := num;
end set_booknumber;
若是只为了设置BOOKSERIALNUM递增的话,还是创建序列比较好
你查下app_bookserialnum表的值,若为100则
create sequence seq_app
start with 101;
插入app_assetcustominfo60 的时候
insert into app_assetcustominfo60 values(seq_app.nextval...)
用seq_app.nextval填充BOOKSERIALNUM值,自动递增
触发器和那个辅助表就可以删了
刚重新试了下,又没问题了
问题解决了,结贴,感谢wildwave和oraclemch的帮助。