zoukankan      html  css  js  c++  java
  • Oracle(七)触发器、函数和存储过程

    *******************=========触发器=========*****************
      :old 代表之前的值
      :new 更改之后现在的值
      这两个值  只能在 for each row 中使用

    update语句  :old   :new
    insert语句  :new
    delete语句  :old
     
    --创建一个teacher_log (只要有人动teacher表,数据就会记录在teacher_log表中)
    create table teacher_log(
    logid number not null,
    old_value varchar2(200),
    create_date date,
    log_type number,
    tno number
    )
    --给logid设置主键
    alter  table teacher_log add constraint pk_teacher_logid primary key(logid);

    --创建序列
    create sequence sq_teacher_logid
    minvalue 1
    maxvalue 999999999
    start with 1
    increment by 1
    cache 20;

    --创建触发器 or replace 如果存在 则 修改
    create or replace  trigger tr_teacher
    after insert or update or delete --会在增删改之后 触发
    on teacher for each row
    --声明
    declare
    v_old_value teacher_log.old_value%type;
    v_type      teacher_log.log_type%type;
    v_tno       teacher_log.tno%type;
    begin
      if inserting then
        v_type:=1; --新增
        v_tno :=:new.tno;
        v_old_value:=:new.tno||'====='||:new.tname;
       elsif deleting then
        v_type:=2; --删除
        v_tno :=:old.tno;
        v_old_value:=:old.tno||'====='||:old.tname;
       else
        v_type:=3; --修改
        v_tno :=:old.tno;
        v_old_value:=:old.tno||'====='||:old.tname||'===='||:new.sal;
      end if;
     
    --将记录写入到 teacher_log
    insert into teacher_log values
    (sq_teacher_logid.nextval,v_old_value,sysdate,v_type,v_tno);

    end tr_teacher;

    ***************=========函数=======******************

    --函数 function
    create or replace function fn_teacher_tid
    (
    f_tid varchar2
    )
    return varchar2
    is
    f_result  teacher.tid%type;

    begin
        if length(f_tid)!=18  then
          dbms_output.put_line('身份证不正确');
          else dbms_output.put_line('身份证正确'); 
        end if;
        --给返回值赋值
        f_result:=substr(f_tid,1,6)||'********'||substr(f_tid,15);
        return f_result;

    end fn_teacher_tid;
     




    --调用函数
    select fn_teacher_tid(110101198603304014) from dual;

    ***************=========存储过程=======******************

    --存储过程   一组完成特定功能的sql语句集
    -- 新增教师   身份证不满足要求 报错
    create or  replace   procedure pro_add_teacher
    (
    p_tno teacher.tno%type,
    p_tname  teacher.tname%type,
    p_tid  teacher.tid%type,
    p_sal  teacher.sal%type
    )
    is
    e_tid_validate exception;

    begin
      if length(p_tid)!=18  --判断身份证号不满足18位
        then  --抛出异常
          raise e_tid_validate;
      end if;
     
      --新增
      insert into teacher(tno,tname,tid,sal)
      values(p_tno,p_tname,p_tid,p_sal);
      --手动提交事务
      commit;
     
    --对异常进行处理
    exception
        when e_tid_validate then
          dbms_output.put_line('请输入正确的身份证号');
          when others then
              dbms_output.put_line('其他的异常');
    end pro_add_teacher;

     
     
    --调用存储过程
    call pro_add_teacher(2001,'小黑黑','123456789123456789',5000);    

  • 相关阅读:
    vue 生产包 背景图片-background图片不显示
    数组的方法
    前端常用Utils工具函数库合集
    vue路由
    问题
    Promise与async/await -- 处理异步
    vue中axios使用
    移动端-调试工具
    微信公众平台开发(8) 自定义菜单功能开发
    微信公众平台开发(6) 翻译功能开发
  • 原文地址:https://www.cnblogs.com/xiaobaizhang/p/8726866.html
Copyright © 2011-2022 走看看