在触发器中如何取出这两个值?

heweiya1 2003-09-18 04:31:43
表结构如下
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;
这个结果是错误的,请各位大侠伸出援助之手,帮助小弟一把。
...全文
35 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckhambobo 2003-09-18
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2274/2274726.xml?temp=1.096743E-02
qiuyang_wang 2003-09-18
  • 打赏
  • 举报
回复
我测试了一下,这样不行,因为是活动表,不能执行这种查询.
建议将最新的 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;
onejune4450 2003-09-18
  • 打赏
  • 举报
回复
我问上面程序的结果是什么?,都是NULL,还是一会NULL一会不NULL
heweiya1 2003-09-18
  • 打赏
  • 举报
回复
是的,或者是NULL,为什么呀。
onejune4450 2003-09-18
  • 打赏
  • 举报
回复
你上面的结果是:
new_version = ?
old_version = ?
heweiya1 2003-09-18
  • 打赏
  • 举报
回复
应该怎么办呀,以下的不对吗?
create or replace trigger BBGX_TRIG
before update on zcbbxx
for each row
declare
old_version varchar2(20) := '';
new_version varchar2(20) := '';

begin


select min(bbxxbh) into old_version from zcbbxx
where sybz = '1';
new_version := :old.bbxxbh
end;
qiuyang_wang 2003-09-18
  • 打赏
  • 举报
回复
1.select bbxxbh into old_version from zcbbxx
where sybz = '1';
在我看来,错误可能出在这里,因为对于ORACLE来说,如果SELECT语句返回多条记录,则会触发错误异常.你是否可以确定表中只有两条记录.
2.另外注意,写了触发器的表,对于当前连接是活动表,不能对他使用li下列函数:
count,sum,max ...等
3.你的写发是否可行,我需要测试一下.

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧