【案例一】
题目:
--触发器:
--添加员工信息,流水号作为自动编号(通过序列生成),
--并且判断如果工资小于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 sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
CREATE SEQUENCE seq_trg_id
minvalue 1
maxvalue 9999999999
start with 1
increment by 1
nocache;
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;
分享到:
相关推荐
- 这两个特殊变量在DML操作触发触发器时产生,存储记录的旧值(:OLD)和新值(:NEW)。 - :OLD用于DELETE和UPDATE操作,存储被修改或删除行的副本。 - :NEW用于INSERT和UPDATE操作,存储新插入或更新行的副本。 ...
这个RAR压缩包包含了两个不同版本的Oracle.ManagedDataAccess.dll,分别是4.122.1.0和4.122.19.1。根据描述,作者在使用过程中发现高版本(4.122.19.1)的性能表现更好,而低版本(4.122.1.0)可能在某些操作上速度...
7. **触发器示例** - 创建一个AFTER DELETE语句级触发器,记录orderdetails表中被删除的记录,可以使用以下代码: ```sql CREATE TABLE orderdetails_tablelog(who varchar2(40), oper_date date, operate ...
Oracle触发器是数据库对象,用于在特定的DML操作(INSERT、UPDATE、DELETE)发生时自动执行一段PL/SQL代码。它们可以帮助实现复杂的业务逻辑和数据验证。在Oracle中,触发器可以分为两种类型:行级触发器和语句级...
在Oracle中,触发器和存储过程是两个关键的数据库编程元素,它们在数据管理和业务流程自动化中发挥着重要作用。本节将深入探讨“Oracle触发器与存储过程高级编程”的相关知识。 **触发器(Triggers)** 触发器是一...
- `:new` 和 `:old` 是两个伪记录,分别代表新值和旧值,在`UPDATE`操作中特别有用。 #### 触发器的管理和控制 除了创建触发器外,Oracle还提供了丰富的命令来管理它们: - **查看触发器状态**:使用 `SELECT ...
总结来说,这个Oracle创建触发器的实例展示了如何使用触发器进行权限控制和日志记录,同时提供了关于如何处理和阻止非预期的DDL操作的示例。这在大型企业系统中尤其重要,因为它们需要严格的数据安全性和审计追踪...
在“oracle-sql.rar”中,我们有两个文件:“oracle常用经典sql查询.doc”和“www.pudn.com.txt”。首先,"oracle常用经典sql查询.doc"很可能包含了各种常见的SQL查询语句,这些语句对于理解和掌握Oracle SQL的基础...
根据提供的文件信息,本文将详细解释Oracle触发器的相关知识点,包括触发器的基本概念、类型以及在实际场景中的应用示例。 ### Oracle触发器基础 触发器是数据库管理系统中的一种存储过程,它会在特定的数据库事件...
"Oracle示例数据库OT"和"oracle示例数据库hr"是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...
例如,如果有一个视图`v_employee`,它基于两个表`employee`和`department`,我们可以在视图上创建一个Instead-of触发器来处理插入操作: ```sql CREATE OR REPLACE TRIGGER ins_v_employee INSTEAD OF INSERT ON v_...
例如,以下是一个简单的触发器示例: ``` CREATE TRIGGER trg_example BEFORE INSERT ON table_name FOR EACH ROW BEGIN -- 触发器体 END; ``` 在这个示例中,trg_example是触发器的名称,BEFORE INSERT ON table_...
Oracle触发器是一种数据库对象,它会在特定的数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行。触发器常用于实现数据完整性约束、业务规则或审计功能。创建触发器的语法如下: ```sql CREATE TRIGGER ...
以下是一个简单的DML触发器示例,用于记录删除的员工信息: ```sql CREATE TABLE emp_audit ( name VARCHAR2(10), delete_time DATE ); CREATE OR REPLACE TRIGGER delete_trigger AFTER DELETE ON emp FOR EACH ...
PLSQL 触发器 PLSQL 触发器是一种特殊的存储过程,与普通存储过程不同的是,...在上面的示例中,我们创建了一个名为 tr_sal 的行级触发器,该触发器会在更新员工薪水时触发,并检查是否减少了薪水,若是,则抛出异常。