我在做一个触发器,使用的是后触发模式,这样的话我怎么样可以拿到我自已插入的新行(这个表中无标识列,不能用某个ID值去取)
解决方案 »
- oracle不定期断开,导致pb程序连接不上
- @@@@@@@@@@@@@@@如何删除已建立的数据连接?
- ORACLE 如何得到一个表格的完整建表脚本?
- 为什么存储过程和包经常会无缘无故出现红叉?
- 如何实现excel和oracle数据互相导入
- 请教一条语句 行变列的问题
- 关于oracle10g Personal Edition下载问题
- 数据倒出总是失败
- oracle 达到高水位delete语句后在同一对象上insert
- 求教Ubuntu Server版安装Oracle 12c 无法弹出OCI安装界面
- 这是求一天每个区域的上班时间数.现在我想求按每个月每个分区的平均小时数应如何写
- 一个 function 执行到中途突然“停止”了
create or replace trigger Trig_Input_tb_SendSH
after insert On tb_SendSH
for each row
declare
inta number(5);
begin
SELECT count(*)
into inta
FROM tb_SimNumber
where tb_SimNumber.TEL = :new.TEL; if inta = 0 then
dbms_output.put_line('tb_sendsjz'); insert into tb_SendSjz (SC_TIME,TC_TIME,Tel,command,trans,sc_id,g2t_sq,t2m_sq,retry)
values(
:new.SC_TIME,:new.TC_TIME,:new.Tel,:new.command,
:new.trans,:new.sc_id,:new.g2t_sq,:new.t2m_sq,:new.retry); else'我想在这里删掉,可是也会出错 delete tb_sendsh where sc_time=:new.SC_TIME and tc_time=:new.TC_TIME and
tel=:new.Tel and command=:new.command and
trans=:new.trans and sc_id=:new.sc_id and g2t_sq=:new.g2t_sq and
t2m_sq=:new.t2m_sq and retry=:new.retry;
null; end if;
end;
insert into tb_sendsh values('01-dec-98','01-dec-98','12345','123456789',1,2,3,4,5)
*
第 1 行出现错误:
ORA-04091: 表 SYSTEM.TB_SENDSH 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "SYSTEM.TRIG_INPUT_TB_SENDSH", line 22
ORA-04088: 触发器 'SYSTEM.TRIG_INPUT_TB_SENDSH' 执行过程中出错
你新插入一条数据,并且还没提交,这时怎么能通过触发器又去对这条数据delete呢?
after insert On tb_SendSH
for each row
declare
inta number(5);
begin
SELECT count(*)
into inta
FROM tb_SimNumber
where tb_SimNumber.TEL = :new.TEL; if inta > 0 then
RAISE_APPLICATION_ERROR(-20005, 'The Sim Card Number is already existing');
end if;
end;