数据库【存储过程,触发器】

1.根据传入的参数score,判定当前分数对应的分数等级,并返回。 

create procedure p3(in score int, out result varchar(50))
begin

    if score >= 85 then
        set result:='优秀';
    elseif score>=60 then
        set result:='及格';
    else
        set result:='不及格';
    end if;
end;

调用:

call p3(98,@result);
select @result;

存储过程有三种参数,分别为IN,OUT和INOUT,INOUT即可为输入参数,也可作为输出参数。

2.将传入的200分制的分数,进行换算,换算成百分制,然后返回

create procedure p4(inout score double)
begin
    set score:=score*0.5;
end;

调用:

set @score=196;
call p4(@score);
select @score;

触发器:

1.通过触发器记录tb_user表的数据变更日志,将变更日志插入到日志表user_logs中,包含增加,修改,删除;

-- 插入数据触发器
create trigger tb_user_insert_trigger
    after insert on tb_user for each now
begin
    insert into user_logs(~) values (~);
end;

查看触发器:

show trigger;

(1)利用触发器实现插入请假信息时,审核人编号自动填入请假人所在部门的部门经理编号。触发器名称为:insert_ask_leave。

DELIMITER $$
CREATE
    TRIGGER `staff`.`insert_ask_leave` BEFORE  INSERT 
    ON `staff`.`ask_leave`
    FOR EACH ROW BEGIN
       DECLARE manangeID1 INT;

       SELECT `manageId` INTO  manangeID1 FROM `dept` WHERE `id`=(
              SELECT `deptId` FROM `employee` WHERE `id`=new.`empId`);
        SET new.`auditId`=manangeID1;
    END$$
DELIMITER

(2)、创建触发器,当插入或修改工资表payroll时,应发工资自动为“基本工资+奖金-缺勤扣钱

插入:

DELIMITER $$
CREATE
    TRIGGER `staff`.`beforeinsert_payloyee` BEFORE  INSERT 
    ON `staff`.`payroll`
    FOR EACH ROW BEGIN
       set  new.`actualSalary`=new.`baseSalary`+new.`bonus`-new.`deductMoney`;
    END$$
DELIMITER ;
DELIMITER $$

修改: 

CREATE
    TRIGGER `staff`.`before_update_payloyee` BEFORE  UPDATE 
    ON `staff`.`payroll`
    FOR EACH ROW BEGIN
   SET  new.`actualSalary`=new.`baseSalary`+new.`bonus`-new.`deductMoney`;
    END$$
DELIMITER ;

(3)编写存储过程实现插入员工表:参数为:员工编号id,姓名userName,出生日期birthDate,身份证号idCard,登录名称loginName,登录 密码password,手机号mobile,电子邮件email,部门编号deptId,员工级别level,员工头像avatar,备注remark。 存储过程名称为:insert_employee。

DELIMITER $$
CREATE
       PROCEDURE `staff`.`insert_employee`( IN id INT, IN userName VARCHAR(255),
IN birthDate DATE,
IN idCard VARCHAR(255),
IN loginName VARCHAR(255),
IN PASSWORD VARCHAR(255),
IN mobile VARCHAR(255),
IN email VARCHAR(255),
IN deptId INT,
LEVEL INT,
IN avatar BLOB,IN remark TEXT)
   
    BEGIN
          INSERT INTO `employee` VALUES(NULL,userName,birthDate,idCard,
loginName,PASSWORD,mobile,email,deptId,LEVEL,avatar,remark);
    END$$
DELIMITER ;

1.下列说法错误的是____B__。

A. SELECT可以运算字符表达式

B. SQL 程序用于触发器和存储过程中

C. 游标只能顺序移动

D. SELECT中的输出列可以是由字段组成的表达式

2.查询出EMP表中1982年及以后入职的员工信息(注:字段hiredate为入职日期,数据类型为DATE型)

A. select * from emp where hiredate>='19820101';

B. select * from emp where to_char(hiredate,'YYYYMMDD')>='19820101';

C. select * from emp where to_date(hiredate,'YYYYMMDD')>='19820101';

D. select * from emp where hiredate>=to_char('19820101','YYYYMMDD');

(A)

3.MySQL数据库四种特性,不包括( c  )。 A. 隔离性 B. 一致性 C. 事务性 D. 原子性

4.UPDATE,SELECT,DELETE语句均可以用子查询。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值