一、创建一个Oracle用户
- 打开pl/sql,使用system登录。
- 右击Users -> new
- 设置用户名、密码。。。如下:
- 设置角色权限
- 设置表空间,如果不设置会报错
二、触发器
2.1 触发器介绍
在Oracle系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块
触发器在数据库中以独立的对象存储
触发器是:特定实践出现的时候,自动执行的代码块。
类似于存储过程,触发器与存储过程的区别在于:
— 存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。
- DML触发器:Oracle可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发
- 替代触发器:由于在Oracle里,不能直接对由两个以上的表建立的视图进行操作,所以给出了替代触发器
- 系统触发器:它可以在Oracle数据库系统的事件中进行触发,如Oracle系统的启动和关闭等
2.2 触发器的语法
create [or replace] tigger 触发器名
{before|after} -- 触发时间
{insert|update|delete [of column [,column]]} -- 触发事件
on [schema.]表名
[for each row]
[where condition]
begin
pl/sql语句
end
- 触发器名:触发器对象的名称
- 触发时间:触发事件和该触发器的操作顺序
— before:表示在数据库动作之前触发器执行
— after:表示在数据库动作之后触发器执行 - 触发事件:在任何情况下触发TRIGGER
例如 insert/update/delete:数据库执行这些动作时会触发此触发器 - 表名:数据库触发器所在的表
- for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次
create tigger triger_name
befor/after insert or update or delete
on employees
begin
当上述触发事件发生前/后,对该表或者其他表进行操作。
end
使用 :new, :old 修饰符
/*
查看更新之后,工资的前后对比
*/
create or replace trigger update_emp_trigger
after
update on emps
for each row
begin
dbms_output.put_line('old:salary' || :old.salary || ',' || 'new:salary' || :new.salary);
end;
/*
编写一个触发器,在对my_emp记录进行删除的时候,在my_emp_bak表中备份对应的记录
/*
create table my_emp
as
select employee_id,salary from employees;
-- where 1=2; 表示这张表是空的 --
create table my_emp_bak
as
select employee_id,salary from employees
where 1=2;
create or replace trigger delete_emp_trigger
before delete on my_emp
for each row
begin
insert into my_emp_trigger
values(:old.employee_id,:old.salary);
end