• 触发器&索引&视图


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

  • 相关阅读:
    gorm 创建数据时字段跟结构体不一致
    查看端口信息
    Mysql 新建用户 并指定能访问的数据库权限
    网页端实现快速播放(有些网页不让快进.....的解决办法)
    Mybatis Map保存到数据库,Mybatis Map动态同步表,Mybatis Map Foreach插入数据库
    Java 获取Exception详细信息,Java获取异常详细内容
    weblogic禁用IIOP协议,weblogic CVE-2020-2551漏洞修复
    IntelliJ IDEA安装配置,IntelliJ IDEA配置Maven,IntelliJ IDEA设置热部署
    Java URL链接动态添加参数,Java URL链接删除参数,UrlUtils链接参数工具类
    Oracle weblogic隐藏console,weblogic修改控制台console入口
  • 原文地址:https://www.cnblogs.com/21556guo/p/13578685.html
Copyright © 2020-2023  润新知