暂无图片
关于oracle的触发器
我来答
分享
刘晓华
2024-09-24
关于oracle的触发器
暂无图片 50M

简化后的员工请假记录表结构如下,销假时,web应用会把对应的记录删除,但是删除时delete后面的条件是不定的,有时按单号删除(delete from hr_h_vhis where ref_no=...) .有时按工号和日期删除(delete from hr_h_vhis where emid = '' and ledt = ''...), 我想写个trigger实现远程数据同步,insert 和update都没问题,delete不知道条件怎么实现?谢谢大师

create table HR_H_VHIS
(
emid CHAR(7) not null,   --工号
ledt DATE not null,          --请假日期
period VARCHAR2(10) not null  --请假时段(1天,上午,下午)

ledy NUMBER(2,1),          --请假天数(1  or 0.5)
lecd CHAR(2) not null,     --假期代码
ref_no VARCHAR2(16),     --单号

primary key(emid,ledt,period)
)

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
小草

CREATE OR REPLACE TRIGGER trg_hr_h_vhis_after_delete
AFTER DELETE ON HR_H_VHIS
FOR EACH ROW
DECLARE
v_emid CHAR(7);
v_ledt DATE;
v_period VARCHAR2(10);
BEGIN
– 获取被删除记录的值,需要保留那些字段就赋值一下
v_emid := :OLD.emid;
v_ledt := :OLD.ledt;
v_period := :OLD.period;
– 根据需要保留对应的字段信息。
insert into t_xxxx values(v_emid, v_ledt, v_period);
END;
/

暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
广州_老虎刘

楼上的方法是可以的, 把insert 换成 delete 就ok了

BEGIN
 delete from 远端表 where emid=:old.emid and ledt=:old.ledt and period=:old.period;
END;

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
redo
回答 11
收发,谢谢专家
报错OGG-01028
回答 6
意思是我这边OGG的版本低了吗😃
用数据泵导出没问题导入出错
回答 3
可能是触发bug了。impdp排除统计信息试试:EXCLUDESTATISTICS
怎么查询表空间的数据占用
回答 4
已采纳
selectt.owner,t.segmentname,t.tablespacename,bytes/1024/1024/1024assizes,q.numrows,t.segmenttypefrom
Oracle 用PKG_TOOL查出来的表结构,能转成sql吗?
回答 1
oracle数据库里没有PKGTOOL这个玩意,这是谁自己写的吧。表字段的注释可以查以下视图selectfromdbacolcomments;如果要生成对应的ddl语句,拼字符串就行了另外,oracl
查看AWR报告
回答 2
这种最好不要开并行了,数据量不大在单节点跑就行;都没有where过滤条件的sql还是建议分表;
NORMAL REDUNDANCY
回答 1
已采纳
A.FINESTRIPING:每个extent大小为1MB,数据均匀分布在所有磁盘上。
数据泵导出碰到ORA-31671,00600错误
回答 3
你看一下这俩篇文章与你的问题相似不。ORA600[17183]WhenImportingWithDataPump(IMPDP)(DocID2350128.1)ORA00600:InternalErro
OUI日志存放在哪里?
回答 1
OUI日志通常存放在操作系统的特定目录中,具体位置取决于操作系统和应用程序的设置。在大多数Linux系统上,OUI日志可以在/var/log/目录下找到。在Windows系统上,OUI日志通常存储在默
Oracle应该优化哪些查询?
回答 2
已采纳
V$SQLAREA和V$SQL是很有用的视图,可以使用它们来查找性能糟糕的需要优化的SQL语句。diskreads列的值显示了系统中执行的磁盘读的次数。将这个值除以执行次数(diskreads/exe