基于TRIGGER的数据同步小工具问题及解决方案

1.invalid username/password 无效用户

 java连接oracle数据库时,不可使用system账号(猜测可能系统账号都无法使用)。创建其他用户,授予权限。

2.表或视图不存在

原sql

更改为(添加实例名instance)

 

3.oracle序列.nextval

nextval与序列关联,表示下一个,如:
创建一个序列seq_1:#序列一般表示第几行,起标识作用
create sequence di_msg_s increment by 1 start with 1

查询序列

select di_msg_s.nextval from sys.dual; 

在表中使用此序列:

create or replace trigger for_di_localhost_after
after insert or update or delete on employee
for each row
begin
  if inserting then
     insert into DI_MSG(ID,TABLENAME,CHANGETYPE,CHANGEDATE,PKFIELD1,STATUS) values
                      (di_msg_s.nextval,'employee','I',sysdate,:new.userid,0);
  end if;
  
  if updating then
     insert into DI_MSG(id,TABLENAME,CHANGETYPE,CHANGEDATE,PKFIELD1,STATUS) values
                  (di_msg_s.nextval,'employee','U',sysdate,:old.userid,0);
  end if;
  
  if deleting then
     insert into DI_MSG(id,TABLENAME,CHANGETYPE,CHANGEDATE,PKFIELD1,STATUS) values
                  (di_msg_s.nextval,'employee','D',sysdate,:old.userid,0);
  end if;
end;

4.oracle触发器中的NEW和Old关键字说明(:new  :old)

oracle默认的 用old代表老数据 new代表新数据 不过二者在使用时是有限制的
insert时 只有new 没有old 
delete时 只有old 没有new
update时 二者都可用

这两个变量只有在使用了关键字 "FOR EACH ROW"时才存在,且update语句两个都有,而insert只有:new ,delete 只有:old

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值