【案例一】
题目:
--触发器:
--添加员工信息,流水号作为自动编号(通过序列生成),
--并且判断如果工资小于0,则改为0;如果大于10000,则改为10000。
CREATE TABLE emp2(
e_id NUMBER,
e_no NUMBER,
e_name VARCHAR2(20),
e_sal NUMBER
)
SELECT * FROM emp2;
CREATE SEQUENCE seq_trg_id;
INSERT INTO emp2(e_id,e_no,e_name,e_sal) VALUES(seq_trg_id.nextval,7788,'章子',
1000000000000)
INSERT INTO emp2(e_id,e_no,e_name,e_sal) VALUES(seq_trg_id.nextval,7788,'章子怡',-10)
CREATE OR REPLACE TRIGGER trg_add_emp_info
BEFORE INSERT
ON emp2
FOR EACH ROW
DECLARE
-- local variables here
BEGIN
SELECT seq_trg_id.NEXTVAL INTO :NEW.e_id FROM dual;
IF :NEW.e_sal < 0 THEN
:NEW.e_sal := 0;
ELSIF :NEW.e_sal > 10000 THEN
:NEW.e_sal := 10000;
END IF;
END;
【 案例二】
题目:
--扩充练习:
--为emp建立触发器,将删除的记录放到emp3表中(autoid,deptno,empno,ename,del_rq-删除日期)
--测试代码
CREATE TABLE emp3(
autoid NUMBER PRIMARY KEY,
deptno NUMBER,
empno NUMBER,
ename VARCHAR2(20),
del_rq DATE
)
CREATE SEQUENCE seq_trg_del_autoid;
INSERT INTO emp
(empno, ename, deptno)
VALUES
(114, '阿娇', 10);
COMMIT;
SELECT * FROM emp;
DELETE emp WHERE empno = 114;
SELECT * FROM emp3;
答案:
CREATE OR REPLACE TRIGGER trg_del_emp_info
BEFORE DELETE
ON emp
FOR EACH ROW
DECLARE
-- local variables here
BEGIN
INSERT INTO emp3(autoid,deptno,empno,ename,del_rq)
VALUES(seq_trg_del_autoid.NEXTVAL,:OLD.deptno,:OLD.empno,:OLD.ename,sysdate);
END;
分享到:
相关推荐
- `:new` 和 `:old` 是两个伪记录,分别代表新值和旧值,在`UPDATE`操作中特别有用。 #### 触发器的管理和控制 除了创建触发器外,Oracle还提供了丰富的命令来管理它们: - **查看触发器状态**:使用 `SELECT ...
在Oracle中,触发器和存储过程是两个关键的数据库编程元素,它们在数据管理和业务流程自动化中发挥着重要作用。本节将深入探讨“Oracle触发器与存储过程高级编程”的相关知识。 **触发器(Triggers)** 触发器是一...
总结来说,这个Oracle创建触发器的实例展示了如何使用触发器进行权限控制和日志记录,同时提供了关于如何处理和阻止非预期的DDL操作的示例。这在大型企业系统中尤其重要,因为它们需要严格的数据安全性和审计追踪...
根据提供的文件信息,本文将详细解释Oracle触发器的相关知识点,包括触发器的基本概念、类型以及在实际场景中的应用示例。 ### Oracle触发器基础 触发器是数据库管理系统中的一种存储过程,它会在特定的数据库事件...
以下是一个简单的触发器示例: ```sql CREATE OR REPLACE TRIGGER my_trigger BEFORE INSERT ON my_table FOR EACH ROW BEGIN IF :new.column_value IS NULL THEN RAISE_APPLICATION_ERROR(-20001, 'Column value...
- 这两个特殊变量在DML操作触发触发器时产生,存储记录的旧值(:OLD)和新值(:NEW)。 - :OLD用于DELETE和UPDATE操作,存储被修改或删除行的副本。 - :NEW用于INSERT和UPDATE操作,存储新插入或更新行的副本。 ...
Oracle触发器是数据库对象,用于在特定的DML操作(INSERT、UPDATE、DELETE)发生时自动执行一段PL/SQL代码。它们可以帮助实现复杂的业务逻辑和数据验证。在Oracle中,触发器可以分为两种类型:行级触发器和语句级...
例如,如果有一个视图`v_employee`,它基于两个表`employee`和`department`,我们可以在视图上创建一个Instead-of触发器来处理插入操作: ```sql CREATE OR REPLACE TRIGGER ins_v_employee INSTEAD OF INSERT ON v_...
以下是一个简单的DML触发器示例,用于记录删除的员工信息: ```sql CREATE TABLE emp_audit ( name VARCHAR2(10), delete_time DATE ); CREATE OR REPLACE TRIGGER delete_trigger AFTER DELETE ON emp FOR EACH ...
"Oracle示例数据库OT"和"oracle示例数据库hr"是Oracle公司为了帮助用户熟悉其数据库系统而提供的两个典型示例数据库。这些示例数据库包含了各种各样的表、视图、存储过程和其他数据库对象,用于演示和学习Oracle的...
Oracle触发器是一种数据库对象,它会在特定的数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行。触发器常用于实现数据完整性约束、业务规则或审计功能。创建触发器的语法如下: ```sql CREATE TRIGGER ...
例如,一个简单的存储过程可能用于计算两个数字的和: ```sql CREATE OR REPLACE PROCEDURE add_numbers (p_num1 NUMBER, p_num2 NUMBER, OUT_RESULT OUT NUMBER) IS BEGIN OUT_RESULT := p_num1 + p_num2; ...
#### 二、触发器示例解析 在提供的代码片段中,展示了两个触发器的创建语句:`AddTrainDayMove` 和 `EditTrainMonthMove`。我们将逐一分析这两个触发器的功能及其实现细节。 ##### 2.1 AddTrainDayMove 触发器 该...
2. **数据类型转换**:Oracle和MySQL中数据类型的对应关系,如何在两个系统之间映射数据类型。 3. **对象关系模型**:在MySQL中实现Oracle的复杂表结构,如嵌套表、索引组织表和分区表。 4. **事务和并发控制**:...
包由两个部分组成:规范(Specification),定义公共接口;主体(Body),包含实际的代码实现。通过包,开发者可以隐藏内部实现细节,只暴露必要的接口给其他模块使用。 在实际应用中,你可能会看到如下示例: - ...
7. **触发器示例** - 创建一个AFTER DELETE语句级触发器,记录orderdetails表中被删除的记录,可以使用以下代码: ```sql CREATE TABLE orderdetails_tablelog(who varchar2(40), oper_date date, operate ...