表的触发器

新增或者删除表内容时通过触发器,更改数据库内另一个表的数据。并同时通所修改的表触发已收到电文的信息

1.新建表

使用SQL语句,通过表的内容结构新建表单

复制代码
-- Create table
create table TQJH04
(
QYH VARCHAR2(25) not null,
ANATIME VARCHAR2(14),
MT NUMBER(8,4),
AD NUMBER(8,4),
VDAF NUMBER(8,4),
STD NUMBER(8,4),
G NUMBER(8,4),
X NUMBER(8,4),
Y NUMBER(8,4),
XD NUMBER(8,4),
LRR VARCHAR2(20),
WLID VARCHAR2(20),
DCH VARCHAR2(2),
QYDDBH VARCHAR2(20)
)
tablespace TQ_ACT
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 16
next 8
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table TQJH04
add primary key (QYH)
using index
tablespace TQ_ACT
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
复制代码

 

2.发送端表的触发器

//左连接示例

select * from omtqi3 a
LEFT JOIN omtqi2 b on trim(b.order_line_id) = trim(a.order_line_id)
where substr(b.item_id,1,5)='A0201';

 

需要增加触发器的表

复制代码
CREATE OR REPLACE TRIGGER jytq04_tri_insert
AFTER INSERT --指定触发时机为插入操作后触发
ON JYTQ04
FOR EACH ROW --说明创建的是行级触发器
BEGIN
IF INSERTING THEN
--当新增一条数据时,会同时记录新增数据通过:new
INSERT INTO TQJH04
(QYH,ANATIME,MT,AD,VDAF,STD,G,X,Y,XD,LRR,WLID,DCH,QYDDBH)
VALUES
( to_char(:new.QYH),
nvl(:new.lrsj,' '),
to_number(nvl(:new.MT,0)),
to_number(nvl(:new.AD,0)),
to_number(nvl(:new.VDAF,0)),
to_number(nvl(:new.STD,0)),
to_number(nvl(:new.G,0)),
to_number(nvl(:new.X,0)),
to_number(nvl(:new.Y,0)),
to_number(nvl(:new.XD,0)),
to_char(nvl(:new.LRR,0)),
to_char(nvl(:new.WLID,0)),
to_number(nvl(:new.DCH,0)),
to_char(nvl(:new.QYDDBH,0)));
END IF;
END;
复制代码

 

3. 修改处理过程参数

修改处理过程(P_MSG_CONFIG)的参数

4. 接收端表的触发器

复制代码
create or replace trigger tri_tqjh04_send
after insert
on tqjh04 for each row

DECLARE
v_buff clob:='';
V_SEND CLOB:='';
V_ERROR VARCHAR2(1):='1';
V_ERROR_MSG VARCHAR2(1000):='';

begin
if inserting then
v_buff:=rpad(nvl(:new.QYH,' '),25,' ')||rpad(nvl(:new.AnaTime,' '),14,' ')||lpad(nvl(:new.mt,0)*10000,8,0)
||lpad(nvl(:new.ad,0)*10000,8,0)||lpad(nvl(:new.VDAF,0)*10000,8,0)||lpad(nvl(:new.STD,0)*10000,8,0)
||lpad(nvl(:new.g,0)*10000,8,0)||lpad(nvl(:new.x,0)*10000,8,0)||lpad(nvl(:new.y,0)*10000,8,0)
||lpad(nvl(:new.xd,0)*10000,8,0)||rpad(nvl(:new.LRR,' '),20,' ')||rpad(nvl(:new.WLID,' '),20,' ')
||rpad(nvl(:new.DCH,' '),2,' ')||rpad(nvl(:new.QYDDBH,' '),20,' ');
V_SEND:='';

V_SEND:=V_buff ;

P_SENDMSG('TQJH04',V_SEND,V_ERROR,V_ERROR_MSG);
IF V_ERROR<>'0' THEN
RETURN;
V_ERROR_MSG := '·¢Ë͵çÎÄʧ°Ü';
RETURN;
END IF;
end if;
end;
复制代码

 

posted @   小何在编程  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签
点击右上角即可分享
微信分享提示