触发器&索引&视图

-- 触发器
create table emp_bak as select * from emp where 1=2;
-- 行级触发器
create or replace trigger t
before update on emp -- before 触发器
for each row -- 行级触发器for each row
when(old.deptno=30) --可加触发的额外条件
declare
begin
insert into emp_bak(empno,ename) values(:old.empno,:old.ename); -- 赋值时可使用:old和:new分别指引用表更新前后
dbms_output.put_line(777);
end;
-- 触发触发器
update emp set comm=888;
select * from emp_bak;

-- 日志表
create table emp_log(
log_id varchar(32),
log_user varchar2(30),
log_type varchar2(30),
hiredate date
);
-- 创建生成日志触发器,语句级触发器
create or replace trigger t2
before update or delete or insert on emp -- 触发场景(update or delete or insert)
declare
v_log emp_log.log_type%type;
begin
if(updating) then
v_log:='updating';
elsif(deleting) then
v_log:='deleting';
elsif(inserting) then
v_log:='inserting';
end if;
insert into emp_log values(sys_guid,user,v_log,sysdate);
end;
-- 触发触发器
insert into emp(empno,ename) values(8888,'fbb');
commit;
update emp set ename='zjl' where empno=8888;
delete from emp where empno=8888;
select * from emp_log;

-- 禁用disable,开启enable触发器
alter trigger t disable;
alter trigger t enable;


-- 索引:标准索引,唯一索引,组合索引,反向键索引,位图索引,基于函数的索引
create index ind_id on emp(id); -- 标准索引,主键默认添加了标准索引
create unique index ui_ename on emp(ename); -- 唯一索引
create index ind_job_mgr on emp(job,mgr); -- 组合索引
create index ri_hiredate on emp(hiredate) reverse; -- 反向键索引
create bitmap index bi_sal on emp(sal); -- 位图索引
create index ind_mgr on emp(lower(mgr)); -- 基于函数的索引

-- 视图
-- 创建视图
create or replace view v
as -- 这里用as
select empno,ename from emp; -- 若没做权限限制,对视图v修改可直接修改至原表
-- 创建视图时添加权限和取别名
create or replace view v(编号,姓名) -- 别名1
as
select empno,ename from emp with read only; -- 只读权限
create or replace view v
as select empno 编号,ename 姓名 from emp; -- 别名2
select * from v;
update v set 姓名='fbb' where 编号=7788;
-- 创建多表连接后的视图需注意,如果没添加 只读权限 那也只能改含主键的主表
create or replace view v2
as
select emp.empno 员工编号,emp.ename 员工姓名,emp.deptno 员工部门编号,dept.dname 部门名称
from emp,dept where emp.deptno=dept.deptno; -- v2的部门名称不可改,其他可以改
select * from v2;

-- 同义词,给表起别名,方便访问别的用户的表
create synonym se for scott.emp; -- or replace也可添加使用
select * from se;

原文地址:https://www.cnblogs.com/21556guo/p/13578685.html