有关ORACLE触发器的问题

xpliuchuming 2001-12-13 07:26:54
我的触发器是这样写的:
create or replace trigger fund.ConvertTo
after insert on fund.BUSTRANSACT
for each row
declare
-- local variables here
begin
DELETE FROM FUND.BUSTRANSACT
where TASerialNO = :NEW.TASerialNO;
INSERT INTO FUND.BUSTRANSACT
VALUES (
:NEW.TASerialNO,
:NEW.TradingPrice * 0.01
);
end ConvertTo;

我作插入的时候为什么没有办法插入呢?
也就是说我做一次insert后发现没有任何的记录,
我把触发器去掉又行了?
我的表结构是这样的:
create table fund.BusTransact(
TASerialNO Char(20),
TradingPrice Number(7,4)
--constraint PK_BusTransact primary key (TASerialNO)




...全文
120 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Free_Man 2001-12-14
  • 打赏
  • 举报
回复
应该改为如下:
create or replace trigger ConvertTo
before insert on BusTransact
for each row
declare
-- local variables here
begin
update BUSTRANSACT
set TradingPrice = TradingPrice * 0.01
where TASerialNO = :NEW.TASerialNO;
end ConvertTo;
/
可以运行,不过结果不对.
最终应该改为如下:
create or replace trigger ConvertTo
before insert on BusTransact
for each row
declare
-- local variables here
begin
:NEW.TradingPrice :=:NEW.TradingPrice* 0.01;
end ConvertTo;
/


Free_Man 2001-12-14
  • 打赏
  • 举报
回复
TO: m_cen()
update的执行是先delete后insert所以你的方法是错的.
Free_Man 2001-12-14
  • 打赏
  • 举报
回复
create or replace trigger ConvertTo
after insert on BusTransact
for each row
declare
-- local variables here
begin
DELETE FROM BusTransact
where TASerialNO = :NEW.TASerialNO;
INSERT INTO BusTransact --因为触发器是在insert后触发,而在此处又继续insert,
--所以会造成死循环,为避免死循环,所以此处非法
VALUES (
:NEW.TASerialNO,
:NEW.TradingPrice * 0.01
);
end ConvertTo;
/
panther_totem 2001-12-14
  • 打赏
  • 举报
回复
对啊,既然只是修改又不是增加,当然应该用UPDATE了,效率也好些,你删了有加的,太麻烦了。
xpliuchuming 2001-12-14
  • 打赏
  • 举报
回复
谢谢各位的帮忙我的问题按Free_Man(浪迹天涯)的做法解决了!
m_cen 2001-12-13
  • 打赏
  • 举报
回复
try it:
变:
INSERT INTO FUND.BUSTRANSACT
VALUES (
:NEW.TASerialNO,
:NEW.TradingPrice * 0.01 );
为:
commit; (大概需要)
update FUND.BUSTRANSACT
set TradingPrice = TradingPrice * 0.01
where TASerialNO = :NEW.TASerialNO;
xpliuchuming 2001-12-13
  • 打赏
  • 举报
回复
或者说, 我希望这样, 每次插入的时候呢将这次插入TRADINGPRICE的值除100,我该怎么做了?
xpliuchuming 2001-12-13
  • 打赏
  • 举报
回复
那我该怎么解决呢?
大侠告诉我吧
m_cen 2001-12-13
  • 打赏
  • 举报
回复
触发器的操作,再次插入TASerialNO,造成主键重复,所以触发器回滚,整个插入操作回滚,不能插入.

2,598

社区成员

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

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