select 'create or replace trigger ' || t.TABLE_NAME || '_' || t.COLUMN_NAME ||
'_Update_Insert' || ' after insert or update of' || ' ' ||
t.COLUMN_NAME || ' on ' || t.TABLE_NAME || ' for each row declare
-- local variables here
begin
if updating then
' || 'insert into historydata (id,RECORDID,TABLENAME,COLNAME,' ||
decode(t.DATA_TYPE,
'VARCHAR2',
'NEWVALUECHAR',
'NUMBER',
'NEWVALUENUMBER',
'TIMESTAMP(6)',
'NEWVALUEDATE',
'FLOAT',
'NEWVALUEFLT') || ' , ' ||
decode(t.DATA_TYPE,
'VARCHAR2',
'OLDVALUECHAR',
'NUMBER',
'OLDVALUENUMBER',
'TIMESTAMP(6)',
'OLDVALUEDATE',
'FLOAT',
'OLDVALUEFLT') || ' , ' ||
'MODIFIER,MODIFYDATE,OPERATETYPE) values (''2w3e4r5t6y7u8i'',:new.id, ''' ||
t.TABLE_NAME || ''' , ''' || t.COLUMN_NAME || ''' , ' || ':new.' ||
t.COLUMN_NAME || ' , ' || ':old.' || t.COLUMN_NAME || ' , ' ||
':new.editor,sysdate,''updating'');' || '
end if; ' || ' if inserting then
' || 'insert into historydata (id,RECORDID,TABLENAME,COLNAME,' ||
decode(t.DATA_TYPE,
'VARCHAR2',
'NEWVALUECHAR',
'NUMBER',
'NEWVALUENUMBER',
'TIMESTAMP(6)',
'NEWVALUEDATE',
'FLOAT',
'NEWVALUEFLT') || ' , ' ||
decode(t.DATA_TYPE,
'VARCHAR2',
'OLDVALUECHAR',
'NUMBER',
'OLDVALUENUMBER',
'TIMESTAMP(6)',
'OLDVALUEDATE',
'FLOAT',
'OLDVALUEFLT') || ' , ' ||
'MODIFIER,MODIFYDATE,OPERATETYPE) values (''2w3e4r5t6y7u8i'',:new.id, ''' ||
t.TABLE_NAME || ''' , ''' || t.COLUMN_NAME || ''' , ' || ':new.' ||
t.COLUMN_NAME || ' , ' || ':old.' || t.COLUMN_NAME || ' , ' ||
':new.editor,sysdate,''inserting'');' || '
end if; ' || 'end ' || t.TABLE_NAME || '_' || t.COLUMN_NAME ||
'_Update_Insert ;'
from user_tab_columns t
where t.TABLE_NAME in ('AIRPORT')
and t.COLUMN_NAME != 'ID'
prompt PL/SQL Developer import file
prompt Created on 2009年6月4日 by fox
set feedback off
set define off
prompt Creating HISTORYDATA...
create table HISTORYDATA
(
ID VARCHAR2(40),
RECORDID VARCHAR2(40),
TABLENAME VARCHAR2(100),
COLNAME VARCHAR2(100),
NEWVALUECHAR VARCHAR2(200),
OLDVALUECHAR VARCHAR2(200),
NEWVALUENUMBER NUMBER(10),
OLDVALUENUMBER NUMBER(10),
NEWVALUEDATE TIMESTAMP(6),
OLDVALUEDATE TIMESTAMP(6),
VALUETYPE NUMBER,
OPERATETYPE NUMBER,
MODIFIER VARCHAR2(100),
MODIFYDATE TIMESTAMP(6),
NEWVALUEFLT FLOAT,
OLDVALUEFLT FLOAT
)
;
comment on column HISTORYDATA.VALUETYPE
is '1-int,2-str,3-date.4-float';
comment on column HISTORYDATA.OPERATETYPE
is '1-update,2-insert,3-delete';
prompt Loading HISTORYDATA...
prompt Table is empty
set feedback on
set define on
prompt Done.
分享到:
相关推荐
NULL 博文链接:https://javazhou.iteye.com/blog/645055
oracle 查询表名以及表的列名的代码。
小编今天在建一个Oracle数据库表时,提示如下表名长度超过了最大值了。错误如下: 代码如下: 错误报告: SQL 错误: ORA-00972: 标识符过长 00972. 00000 – “identifier is too long” *Cause: An identifier ...
将此脚本复制,输入表名执行可直接获得所有本表字段。
sql语句生成器for oracle(提供表名,自动获取列名)
Oracle获取用户下所有表名 获取表所有的列名及数据类型 两个SQL查询语句
1、备份Oracle数据库表时添加动态时间戳,解决了ORA-00922: missing or invalid option 错误。 2、备份表结构和数据,还备份索引、序列、触发器等对象,提高了备份速度。但需要手动备份原始表的序列。 3、备份策略是...
ORACLE怎么修改表名呢? 1.在控制台中修改 2.用sql语句修改表名,更加方便、灵活
Oracle中表是数据存储的基本结构。Oracle8i引入了分区表和对象...表名标识一个表,所以应尽可能在表名中描述表,oracle中表名或列名最长可以达30个字符串。表名应该以字母开始,可以在表名中包含数字、下划线、#、$等。
本文介绍了oracle触发器的概念和类型,create or replace trigger bj_customer before update on customer for each row begin update order set cu_no=:new.cu_no, cu_name=:new.cu_name, ...
上传两本Oracle的trigger的学习资料(本人的学习参考书)。 详解Oracle中的trigger(中文版,PDF格式),包括DML触发器,替代触发器,系统触发器以及变异表等,含代码。 确实是本Oracle trigger的好书。 这是第一本...
SQL和Oracle中统计数据库中表个数及表名
NULL 博文链接:https://hb-keepmoving.iteye.com/blog/804297
如何在oracle中查询所有用户表的表名、主键名称、索引、外键等
获取oracle 表字段,表名,以及主键之类等等的信息,获取oracle 表字段,表名,以及主键之类等等的信息获取oracle 表字段,表名,以及主键之类等等的信息获取oracle
创建唯一索引: CREATE unique INDEX 索引名 ON 表名 列名 TABLESPACE 表空间名; 例如:create unique index IND ZL JGSPJWGXB on ZL JGSPJWGXB JGID SPID ;