你的字段没有说明清楚或许应该这样吧:
create or replace trigger BBGX_TRIG
after update on zcbbxx
for each row
declare
old_version varchar2(20);
new_version varchar2(20);
begin
select bbxxbh into old_version from zcbbxx
where sybz = '1';
new_version := :new.bbxxbh
end;
create or replace trigger BBGX_TRIG
after update on zcbbxx
for each row
declare
old_version varchar2(20);
new_version varchar2(20);
begin
select bbxxbh into old_version from zcbbxx
where sybz = '1';
new_version := :new.bbxxbh
end;
表结构如下
bbxxbh sybz
AAA 1 --使用
BBB 2
实现功能,假如user_flag发生变化时(update)例如由BBB 2-->1时,希望得到的值是old_version = 'AAA',new_sion = 'BBB'.
我的触发器是(本表用触发器不用PROCESS)
create or replace trigger BBGX_TRIG
before update on zcbbxx
for each row
declare
old_version varchar2(20);
new_version varchar2(20);begin
select bbxxbh into old_version from zcbbxx
where sybz = '1';
new_version := :old.bbxxbh
end;
这个结果是错误的,请各位大侠伸出援助之手,帮助小弟一把。
where sybz = '1';
在我看来,错误可能出在这里,因为对于ORACLE来说,如果SELECT语句返回多条记录,则会触发错误异常.你是否可以确定表中只有两条记录.
2.另外注意,写了触发器的表,对于当前连接是活动表,不能对他使用li下列函数:
count,sum,max ...等
3.你的写发是否可行,我需要测试一下.
建议将最新的 bbxxbh放在另外一张表中,这样就没有问题了:
create or replace trigger w_sy before update on tab1 for each row
declare
oldver varchar2(10);
newver varchar2(10);
begin
select aa into oldver from tab2;
update tab2 set aa = newver;
newver := :old.aa;
end;
select bbxxbh into old_version from zcbbxx
where sybz = '1'; --odl_version=BBBnew_version := :old.bbxxbh --new_version=BBB 问题一是因为行级别前,select bbxxbh into old_version from zcbbxx where sybz = '1'这条语句只能查询一条语句符合,即bbxxbh sybz
AAA 1
行级别前只能在触发器完成后,数据才能体现到数据库表