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.
分享到:
相关推荐
* 创建触发器:create trigger 触发器名 before/after insert/update/delete on 表名 for each row as $$ begin ... end; 复杂查询 Oracle 的复杂查询提供了强大的查询能力,允许开发者创建复杂的查询语句,例如:...
8. **自增序列**:Oracle不直接支持自增字段,但可以通过序列(SEQUENCE)和触发器(TRIGGER)实现类似功能。序列创建: ``` CREATE SEQUENCE seq_StudentID START WITH 1 INCREMENT BY 1; ``` 9. **索引**...
Oracle 数据库主键自动生成 在 Oracle 数据库中,主键自动生成是指在插入数据时自动生成唯一的主键值,从而简化数据录入和维护工作。下面将详细介绍 Oracle 数据库主键自动生成的实现方法和相关知识点。 序列...
在Oracle中,可以通过CREATE TABLE语句来创建表,需要指定表名、列名、数据类型以及可能的约束等。 8. 如何在Oracle中插入数据? 通过INSERT语句在Oracle中插入数据。语句的基本格式为INSERT INTO table_name ...
11. **索引**:`CREATE INDEX 索引名 ON 表名 (列名);`为提高查询性能创建索引。`DROP INDEX 索引名;`用于删除索引。 12. **视图**:`CREATE VIEW 视图名 AS SELECT ...;`定义基于查询的虚拟表。视图不存储数据,但...
`CREATE TRIGGER 触发器名 ACTION时机 ON 表名 FOR EACH ROW 触发器体;` 8. **事务处理**: MySQL支持事务的ACID特性,确保数据一致性。`START TRANSACTION;` 开始事务,`COMMIT;` 提交事务,`ROLLBACK;` 回滚事务...
保留字是SQL和PL/SQL中预定义的具有特殊含义的关键字,不能用作表名、列名或其他数据库对象的名称。了解保留字有助于避免命名冲突。 9. **查询Oracle编码集**: 可以使用`SELECT * FROM NLS_DATABASE_PARAMETERS ...
学习如何正确指定表名、列名和值,以及如何使用子查询进行条件判断是至关重要的。 四、数据删除 DELETE语句用于从表中删除记录,但需谨慎操作,因为它通常不可逆。可以配合WHERE子句指定删除条件,避免误删数据。 ...
(2)输入字串“abc”+“.”,如果“abc”是一表名/视图,或其别名,则列出表/视图的所有列名及数据类型;如果“abc”是一用户名,则列出该用户的所有对象;如果“abc”是一包名,则列出包内的过程和函数; (3)...
这是基本的查询结构,其中"列名"是你想要获取的字段,"表名"是数据来源,"条件"则用来过滤结果。 2. **聚合函数**:如COUNT、SUM、AVG、MAX和MIN,它们用于对一组值进行计算,比如计算胃出血病人的总数或平均年龄...
这些对象类型包括CLUSTER、DATABASE LINK、FUNCTION、INDEX、LIBRARY、PACKAGE、PACKAGE BODY、PROCEDURE、SEQUENCE、SYNONYM、TABLE、TRIGGER、TYPE、UNDEFINED、VIEW等。 ### 四、表 - **`SELECT * FROM dba_...
在PL/SQL中,所有的表名、列名和数据类型都会在编译时进行检查。此外,PL/SQL可以广泛应用于各种Oracle开发工具,如SQL*PLUS,也可以被其他非Oracle开发工具调用。 PL/SQL程序由三个部分构成:声明部分(DECLARE)...
可以指定列名、表名、条件等,例如`SELECT column1, column2 FROM table WHERE condition`。 - **INSERT语句**:向表中插入新记录,如`INSERT INTO table (column1, column2) VALUES ('value1', 'value2')`。 - **...
(2)输入字串“abc”+“.”,如果“abc”是一表名/视图,或其别名,则列出表/视图的所有列名及数据类型 ;如果“abc”是一用户名,则列出该用户的所有对象;如果“abc”是一包名,则列出包内的过程和函数; (3)...
创建索引如`CREATE INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名;`,删除索引使用`DROP INDEX 索引名;`,重建索引则用`ALTER INDEX 索引名 REBUILD;` 序列(Sequence)提供自增的数字序列,通常用于主键生成。...
使用SELECT语句,可以指定列名、表名、条件等,例如`SELECT column1, column2 FROM table WHERE condition`。 2. 数据插入:INSERT语句用于向表中添加新记录,如`INSERT INTO table (column1, column2) VALUES ...
列名则简洁明了,反映列所含数据的意义,如`EMPLOYEE_ID`、`FIRST_NAME`、`LAST_NAME`。 5. **索引命名规范**: - 索引有助于提高查询性能,命名时可以反映其作用,如`IDX_EMPLOYEE_LAST_NAME`表示根据姓氏进行...
4. **更改表名**:在Oracle中,更改表名可以使用`ALTER TABLE`语句配合`RENAME TO`关键字,例如:`ALTER TABLE CUSTOMER RENAME TO CUSTOMER_CHANGE`。正确答案是B。 5. **游标(Cursor)**:在SQL中,游标允许我们...
CREATE INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名; ``` 删除索引: ```sql DROP INDEX 索引名; ``` 重建索引: ```sql ALTER INDEX 索引名 REBUILD; ``` 7. Sequence(序列):提供有序的整数序列,通常...
SELECT text FROM user_source WHERE name = 'TRIGGER_NAME' AND type = 'TRIGGER'; SELECT text FROM user_source WHERE name = 'PROCEDURE_NAME' AND type = 'PROCEDURE'; SELECT text FROM user_source WHERE ...