sql语句如下:
select * from BDC_XMNDZFW;
select * from BDC_XMNDZFW_MX;
----复制备份表(若果想要备份的功能,可令条件为1=1
Create Table BDC_XMNDZFW_Backup As select * from BDC_XMNDZFW Where 1=2;
Create Table BDC_XMNDZFW_MX_Backup As select * from BDC_XMNDZFW_MX Where 1=2;
--创建操作日志表
Drop Table ChgLogTab;
create Table ChgLogTab
(
TableName Varchar2(32),
ForeignKey Varchar2(50),
MainKey Varchar2(36),
DMLType Varchar2(8),
DMLTime DATE,
PersonName VARCHAR2(30),
ProgramExe VARCHAR2(64),
HostMachine Varchar2(64),
IpAddr CHAR(15)
);
Select * from ChgLogTab;
Delete From ChgLogTab;
------------------------------------------------------------------
---不授权给用户,触发器就没法看到这张表
sys as sysdba;
grant select on V_$SESSION to BDCDJ_ZF;
------------------------------------------------------------------
--------无效的主机名绑定变量:解决方案,Values的参数列表中缺少一个分隔符(,)
Create or Replace Trigger Tri_BDC_XMNDZFW
Before insert or delete or update on BDC_XMNDZFW for each row
Declare
TabName Varchar2(32);
ForeignKey Varchar2(50);
MainKey Varchar2(36);
DMLType Varchar2(8);
PersonName VARCHAR2(30);
ProgramExe VARCHAR2(64);
HostMachine VARCHAR2(64);
IpAddr CHAR(15);
DMLTime Date;
strTable Varchar(32);
strSql Varchar(1024);
Begin
TabName := 'BDC_XMNDZFW';
strTable := TabName||'_Backup';
ForeignKey := null;
MainKey := null;
select username into PersonName from v$session where audsid = userenv('sessionid');
select program into ProgramExe from v$session where audsid = userenv('sessionid');
select machine into HostMachine from v$session where audsid = userenv('sessionid');
select sys_context('userenv','ip_address') into IpAddr from v$session where audsid = userenv('sessionid');
select sysdate into DMLTime from dual;
--select username into PersonName,program into ProgramExe,machine into HostMachine,sys_context('userenv','ip_address') into IpAddr,sysdate into DMLTime from v$session where audsid = userenv('sessionid');
if inserting then
ForeignKey := :new.XMNDZFWID;
DMLType := '新增';
strSql := 'Insert Into '||strTable||'(XMNDZFWID,CJR,XGSJ,XGR,BZ,FT,XMMC,TDXZ,XMDZZT,CFZT,DYZT,YYZT,YGZT,DYQZT,BAZT,BLZT,CQZT,XZQDM,ZDDM,BDCDYH,FDZL,TDSYQR,DYTDMJ,FTTDMJ,TDKSSYRQ,TDJSSYRQ,CJSJ,FWYT,FWXZ,YTQX,GLQY,SFHBCF,QLRZJBH) Values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25,:26,:27,:28,:29,:30,:31,:32,:33)';
execute immediate strSql Using :new.XMNDZFWID,:new.CJR,:new.XGSJ,:new.XGR,:new.BZ,:new.FT,:new.XMMC,:new.TDXZ,:new.XMDZZT,:new.CFZT,:new.DYZT,:new.YYZT,:new.YGZT,:new.DYQZT,:new.BAZT,:new.BLZT,:new.CQZT,:new.XZQDM,:new.ZDDM,:new.BDCDYH,:new.FDZL,:new.TDSYQR,:new.DYTDMJ,:new.FTTDMJ,:new.TDKSSYRQ,:new.TDJSSYRQ,:new.CJSJ,:new.FWYT,:new.FWXZ,:new.YTQX,:new.GLQY,:new.SFHBCF,:new.QLRZJBH;
elsif deleting then
ForeignKey := :old.XMNDZFWID;
DMLType := '删除';
strSql := 'Insert Into '||strTable||'(XMNDZFWID,CJR,XGSJ,XGR,BZ,FT,XMMC,TDXZ,XMDZZT,CFZT,DYZT,YYZT,YGZT,DYQZT,BAZT,BLZT,CQZT,XZQDM,ZDDM,BDCDYH,FDZL,TDSYQR,DYTDMJ,FTTDMJ,TDKSSYRQ,TDJSSYRQ,CJSJ,FWYT,FWXZ,YTQX,GLQY,SFHBCF,QLRZJBH) Values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25,:26,:27,:28,:29,:30,:31,:32,:33)';
execute immediate strSql Using :old.XMNDZFWID,:old.CJR,:old.XGSJ,:old.XGR,:old.BZ,:old.FT,:old.XMMC,:old.TDXZ,:old.XMDZZT,:old.CFZT,:old.DYZT,:old.YYZT,:old.YGZT,:old.DYQZT,:old.BAZT,:old.BLZT,:old.CQZT,:old.XZQDM,:old.ZDDM,:old.BDCDYH,:old.FDZL,:old.TDSYQR,:old.DYTDMJ,:old.FTTDMJ,:old.TDKSSYRQ,:old.TDJSSYRQ,:old.CJSJ,:old.FWYT,:old.FWXZ,:old.YTQX,:old.GLQY,:old.SFHBCF,:old.QLRZJBH;
elsif updating then
ForeignKey := :old.XMNDZFWID;
DMLType := '更新';
strSql := 'Insert Into '||strTable||'(XMNDZFWID,CJR,XGSJ,XGR,BZ,FT,XMMC,TDXZ,XMDZZT,CFZT,DYZT,YYZT,YGZT,DYQZT,BAZT,BLZT,CQZT,XZQDM,ZDDM,BDCDYH,FDZL,TDSYQR,DYTDMJ,FTTDMJ,TDKSSYRQ,TDJSSYRQ,CJSJ,FWYT,FWXZ,YTQX,GLQY,SFHBCF,QLRZJBH) Values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25,:26,:27,:28,:29,:30,:31,:32,:33)';
execute immediate strSql Using :old.XMNDZFWID,:old.CJR,:old.XGSJ,:old.XGR,:old.BZ,:old.FT,:old.XMMC,:old.TDXZ,:old.XMDZZT,:old.CFZT,:old.DYZT,:old.YYZT,:old.YGZT,:old.DYQZT,:old.BAZT,:old.BLZT,:old.CQZT,:old.XZQDM,:old.ZDDM,:old.BDCDYH,:old.FDZL,:old.TDSYQR,:old.DYTDMJ,:old.FTTDMJ,:old.TDKSSYRQ,:old.TDJSSYRQ,:old.CJSJ,:old.FWYT,:old.FWXZ,:old.YTQX,:old.GLQY,:old.SFHBCF,:old.QLRZJBH;
end if;
strSql := 'Insert Into ChgLogTab(TableName, ForeignKey, MainKey, DMLType, DMLTime, PersonName, ProgramExe, HostMachine, IpAddr) Values(:1, :2, :3, :4, :5, :6, :7, :8, :9)';
execute immediate strSql Using TabName, ForeignKey, MainKey, DMLType, DMLTime, PersonName, ProgramExe, HostMachine, IpAddr;
End;
--------------------------------------------------测试代码
delete from BDC_XMNDZFW where XMNDZFWID = 'ZJD00000000848';
update BDC_XMNDZFW set CJR = 'DogCat' Where XMNDZFWID = 'ZJD00000000849';
select * from BDC_XMNDZFW_Backup;
-----操作表
Select * from ChgLogTab order by DMLTime;
delete from BDC_XMNDZFW_MX where XMNDZFWID = 'ZJD00000000833' and MXID = 'CF00000002074';---Delete only one
delete from BDC_XMNDZFW_MX where XMNDZFWID = 'ZJD00000000871';---Delete many
update BDC_XMNDZFW_MX set ZCS = '5' where XMNDZFWID = 'ZJD00000000818'
select * from BDC_XMNDZFW_MX_Backup;
Create or Replace Trigger Tri_BDC_XMNDZFW_MX
Before insert or delete or update on BDC_XMNDZFW_MX for each row
Declare
TabName Varchar2(32);
ForeignKey Varchar2(50);
MainKey Varchar2(36);
DMLType Varchar2(8);
PersonName VARCHAR2(30);
ProgramExe VARCHAR2(64);
HostMachine VARCHAR2(64);
IpAddr CHAR(15);
DMLTime Date;
strTable Varchar(32);
strSql Varchar(1024);
Begin
TabName := 'BDC_XMNDZFW_MX';
strTable := TabName||'_Backup';
ForeignKey := null;
MainKey := null;
select username into PersonName from v$session where audsid = userenv('sessionid');
select program into ProgramExe from v$session where audsid = userenv('sessionid');
select machine into HostMachine from v$session where audsid = userenv('sessionid');
select sys_context('userenv','ip_address') into IpAddr from v$session where audsid = userenv('sessionid');
select sysdate into DMLTime from dual;
--select username into PersonName,program into ProgramExe,machine into HostMachine,sys_context('userenv','ip_address') into IpAddr,sysdate into DMLTime from v$session where audsid = userenv('sessionid');
if inserting then
ForeignKey := :new.XMNDZFWID;
MainKey := :new.MXID;
DMLType := '新增';
strSql := 'Insert Into '||strTable||'(XMNDZFWID,MXID,ZCS,GHYT,FWJG,ZH,XMMC,CFZT,DYQZT,YGZT,YYZT,DYZT,CQZT,BAZT,BLZT,BZ,XGR,XGSJ,CJR,CJSJ,ZTS,JGSJ,JZMJ,GLQY,JZWMC,ZRZID,BDCDYH) Values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25,:26,:27)';
execute immediate strSql Using :new.XMNDZFWID,:new.MXID,:new.ZCS,:new.GHYT,:new.FWJG,:new.ZH,:new.XMMC,:new.CFZT,:new.DYQZT,:new.YGZT,:new.YYZT,:new.DYZT,:new.CQZT,:new.BAZT,:new.BLZT,:new.BZ,:new.XGR,:new.XGSJ,:new.CJR,:new.CJSJ,:new.ZTS,:new.JGSJ,:new.JZMJ,:new.GLQY,:new.JZWMC,:new.ZRZID,:new.BDCDYH;
elsif deleting then
ForeignKey := :old.XMNDZFWID;
MainKey := :old.MXID;
DMLType := '删除';
strSql := 'Insert Into '||strTable||'(XMNDZFWID,MXID,ZCS,GHYT,FWJG,ZH,XMMC,CFZT,DYQZT,YGZT,YYZT,DYZT,CQZT,BAZT,BLZT,BZ,XGR,XGSJ,CJR,CJSJ,ZTS,JGSJ,JZMJ,GLQY,JZWMC,ZRZID,BDCDYH) Values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25,:26,:27)';
execute immediate strSql Using :old.XMNDZFWID,:old.MXID,:old.ZCS,:old.GHYT,:old.FWJG,:old.ZH,:old.XMMC,:old.CFZT,:old.DYQZT,:old.YGZT,:old.YYZT,:old.DYZT,:old.CQZT,:old.BAZT,:old.BLZT,:old.BZ,:old.XGR,:old.XGSJ,:old.CJR,:old.CJSJ,:old.ZTS,:old.JGSJ,:old.JZMJ,:old.GLQY,:old.JZWMC,:old.ZRZID,:old.BDCDYH;
elsif updating then
ForeignKey := :old.XMNDZFWID;
MainKey := :old.MXID;
DMLType := '更新';
strSql := 'Insert Into '||strTable||'(XMNDZFWID,MXID,ZCS,GHYT,FWJG,ZH,XMMC,CFZT,DYQZT,YGZT,YYZT,DYZT,CQZT,BAZT,BLZT,BZ,XGR,XGSJ,CJR,CJSJ,ZTS,JGSJ,JZMJ,GLQY,JZWMC,ZRZID,BDCDYH) Values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25,:26,:27)';
execute immediate strSql Using :old.XMNDZFWID,:old.MXID,:old.ZCS,:old.GHYT,:old.FWJG,:old.ZH,:old.XMMC,:old.CFZT,:old.DYQZT,:old.YGZT,:old.YYZT,:old.DYZT,:old.CQZT,:old.BAZT,:old.BLZT,:old.BZ,:old.XGR,:old.XGSJ,:old.CJR,:old.CJSJ,:old.ZTS,:old.JGSJ,:old.JZMJ,:old.GLQY,:old.JZWMC,:old.ZRZID,:old.BDCDYH;
end if;
strSql := 'Insert Into ChgLogTab(TableName, ForeignKey, MainKey, DMLType, DMLTime, PersonName, ProgramExe, HostMachine, IpAddr) Values(:1, :2, :3, :4, :5, :6, :7, :8, :9)';
execute immediate strSql Using TabName, ForeignKey, MainKey, DMLType, DMLTime, PersonName, ProgramExe, HostMachine, IpAddr;
End;