create or replace trigger emp_bud
before update or delete on emp
for each row
declare
v_action varchar2(50);
v_log varchar2(500) := '';
begin
if :new.empno is not null then
begin
v_log := v_log || '操作' || :new.empno ;
if :new.ename <> :old.ename then
v_log := v_log || ' ename 由' || :old.ename || '更改为' || :new.ename;
end if;
if :new.job <> :old.job then
v_log := v_log || ' job 由' || :old.job || '更改为' || :new.job;
end if;
if :new.mgr <> :old.mgr then
v_log := v_log || ' mgr 由' || :old.mgr || '更改为' || :new.mgr;
end if;
if :new.hiredate <> :old.hiredate then
v_log := v_log || ' hiredate 由' || :old.hiredate || '更改为' ||
:new.hiredate;
end if;
if :new.sal <> :old.sal then
v_log := v_log || ' sal 由' || :old.sal || '更改为' || :new.sal;
end if;
if :new.comm <> :old.comm then
v_log := v_log || ' comm 由' || :old.comm || '更改为' || :new.comm;
end if;
if :new.deptno <> :old.deptno then
v_log := v_log || ' deptno 由' || :old.deptno || '更改为' || :new.deptno;
end if;
if UPDATING then
v_action := 'update';
elsif deleting then
v_action := 'delete';
end if;
insert into emp_log
(id, action, time, log, actor)
values
(EMPLOG_SEQ.NEXTVAL, v_action, sysdate, v_log, USER);
/*pkg_emp.v_emp_obj.empno := :new.empno;
select *
into pkg_emp.v_emp_obj
from emp
where empno = pkg_emp.v_emp_obj.empno;
dbms_output.put_line ( 'ename = ' || pkg_emp.v_emp_obj.ename || ' job = ' || pkg_emp.v_emp_obj.job );*/
exception
when others then
dbms_output.put_line(SQLCODE || '-before-' || SQLERRM);
end;
else
pkg_emp.v_emp_obj.empno := 0;
end if;
end;
例子: update emp where empno=7369;
注意 : 本例子中一定要有empno才可以
分享到:
相关推荐
- 触发器执行上下文:理解触发器在INSERT、UPDATE或DELETE操作中的作用,以及何时触发(BEFORE、AFTER)和针对哪张表(FOR EACH ROW)。 4. **其他调试工具**: - SQL Developer:Oracle官方提供的免费工具,同样...
Oracle 触发器是一种数据库对象,它与某张表相关联,当有 DML 语句对表进行操作时,可以引起触发器的执行,达到对插入记录的一致性、正确性和规范性控制的目的。 触发器的实现比较灵活,编程性强,自然成了最流行的...
替代触发器(INSTEAD OF触发器)是定义在视图上的触发器,用于替换对视图的操作,例如插入、删除和更新。当试图通过视图执行这些操作时,实际执行的是替代触发器定义的操作,而不是直接对视图进行操作。 #### 9.6 ...
Oracle触发器是数据库管理系统Oracle中的一种重要特性,它允许开发者定义特定的数据操作行为,这些行为会在数据表上执行DML(插入、更新、删除)操作时自动触发。触发器本质上是一种存储过程,与数据表紧密关联,...
在本例中,我们将使用触发器来记录对某张表的操作日志。 #### 三、SQL Server的Inserted和Deleted虚拟表 在SQL Server中,`Inserted`和`Deleted`是两个非常重要的虚拟表,它们用于存储DML(数据操纵语言)操作的...
DML触发器可以按照触发时间分为BEFORE和AFTER,允许在操作执行前或执行后进行干预。此外,它们还可以按行或按语句触发,这意味着触发器可以针对每一行数据或整个操作执行。 2. **替代触发器(INSTEAD OF)**:这种...
在Oracle中,连接查询和子查询以及存储过程与触发器是数据库管理与开发中的核心概念,下面将对这些主题进行深入讲解。 首先,让我们探讨**连接查询**。在数据库操作中,连接查询用于合并两个或更多表的数据,根据...
- **透明性**:触发器的执行对用户来说是透明的,即用户执行某项操作时不会直接意识到触发器的存在。 #### 3. 认识触发器 触发器主要针对以下几类事件: - **DML操作**:包括`UPDATE`、`INSERT`和`DELETE`等操作...
Oracle数据库的触发器是数据库管理系统中的一个重要特性,用于在特定数据操作(如INSERT、UPDATE、DELETE)前后自动执行预定义的逻辑。它们是存储过程的一种特殊形式,与数据表紧密关联,确保数据的一致性和完整性。...
1. 触发器的概念:触发器是Oracle数据库中的一种存储过程,它在特定的DML(INSERT, UPDATE, DELETE)操作触发时自动执行。我们可以利用触发器来监视对表的结构变更,一旦发现有修改尝试,触发器就会阻止该操作。 2....
根据给定的部分内容中的示例,创建一个名为“test_trigger”的触发器,该触发器在对“test_table”表执行插入操作前检查新记录的ID是否为空,如果为空,则为其分配一个来自“TEST_SEQUENCE”的新值。具体SQL语句如下...
当某个事务对某张表进行读写操作时,可能会对该表施加锁定,防止其他事务同时对该表进行修改。在某些情况下,我们需要查询哪些表被锁住了以及锁定这些表的会话信息。 **SQL语句示例:** ```sql SELECT dob.OBJECT_...
4. **触发器**:触发器是一种数据库级别的存储过程,会在特定的DML操作(插入、更新或删除)发生时自动执行。15个DML触发器和1个替代触发器可能用于实现业务规则,例如,更新库存量、记录交易历史、检查购物车商品...
Oracle触发器是数据库中一种非常重要的对象,它允许在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行一段PL/SQL代码。在本文中,我们将探讨一个常见的问题,即当触发器试图更新同一张表并在同一事务中...
2. 数据操作语言(DML):用于插入、更新和删除数据。如`INSERT INTO` 插入记录,`UPDATE` 更新记录,`DELETE FROM` 删除记录。 3. 数据查询语言(DQL):用于检索数据,最常用的是`SELECT`语句,可以配合`FROM`、`...
在Oracle数据库管理中,我们经常需要进行数据导出操作,以备份重要数据或者在不同的环境之间迁移数据。"Oracle导出除忽略表以外的其他表"这个任务涉及到Oracle的Data Pump工具,它提供了高效的数据导入和导出功能。...
例如,可以在用户修改某张表后自动更新另一个表中的统计数据。 ##### 4. 事务(Transaction) 事务是一组逻辑上相关的操作序列。为了保证数据一致性,事务必须具备原子性、一致性、隔离性和持久性四个特征。 #### 六...
通过操作这些表,新手可以学习如何创建、查询、更新和删除数据,这些都是数据库管理的基础技能。 在Oracle中,管理和操作这些表需要用到SQL(结构化查询语言)。SQL是用于与关系数据库进行通信的标准语言,包括...
此外,学会使用WHERE子句进行条件筛选,GROUP BY和HAVING子句进行数据分组,以及JOIN操作连接多张表也至关重要。 在Oracle中,数据类型是定义列或字段的基础,常见的数据类型有:NUMBER(用于数值),VARCHAR2(可...