• 触发器&索引&视图


    -- 触发器
    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;

  • 相关阅读:
    Oracle基础 (十二)数学函数
    Oracle基础 (十一)字符串函数
    Oracle基础(十) DML数据操作
    Oracle 常用命令大全
    Oracle 常用的SQL语法和数据对象
    Server.MapPath()
    登陆sharepoint的主页,提示:文件存在(异常来自 HRESULT:0x80070050)
    如何查看电脑的开机时间
    SQL 2008登录的域账户与数据库服务器不再同一个域的 处理方法
    发布MVC项目到服务器上时候遇到的 模块 DirectoryListingModule 通知 ExecuteRequestHandler 处理程序 StaticFile 错误代码 0x00000000
  • 原文地址:https://www.cnblogs.com/21556guo/p/13578685.html
Copyright © 2020-2023  润新知