diff --git "a/48 \351\251\254\345\256\217\350\276\276/1011.md" "b/48 \351\251\254\345\256\217\350\276\276/1011.md" new file mode 100644 index 0000000000000000000000000000000000000000..60c463a5ac6fb9ff03b0bfe17d9bbfa5ac3d4356 --- /dev/null +++ "b/48 \351\251\254\345\256\217\350\276\276/1011.md" @@ -0,0 +1,111 @@ +## 笔记 + +delimiter // +create function f1(myid int) # 函数传参默认是 in 类型,需要省略 + returns varchar(20) # 返回值类型,只能传出一个 + deterministic # 指名函数内有无 SQL语句 + contains sql # no sql 就是说明没有 SQL语句 +begin + return (select name from student where id = myid); +end // + +delimiter ; + +fetch 游标名 into 变量1,变量...; + +注意: + +变量的个数是根据定义游标时查询的字段个数决定 + +每 fetch 一次取一行,依次向下取 + +close 游标名; 关闭游标 + + + + + + + + + + + + + + + + + + + +作业 + +-- -- 部门表 +-- create table dept( +-- deptno int primary key auto_increment, -- 部门编号 +-- dname varchar(14) , -- 部门名字 +-- loc varchar(13) -- 地址 +-- ) ; +-- -- 员工表 +-- create table emp( +-- empno int primary key auto_increment,-- 员工编号 +-- ename varchar(10), -- 员工姓名 - +-- job varchar(9), -- 岗位 +-- mgr int, -- 直接领导编号 +-- hiredate date, -- 雇佣日期,入职日期 +-- sal int, -- 薪水 +-- comm int, -- 提成 +-- deptno int not null, -- 部门编号 +-- foreign key (deptno) references dept(deptno) +-- ); +-- insert into dept values(10,'财务部','北京'); +-- insert into dept values(20,'研发部','上海'); +-- insert into dept values(30,'销售部','广州'); +-- insert into dept values(40,'行政部','深圳'); +-- insert into emp values(7369,'刘一','职员',7902,'1980-12-17',800,null,20); +-- insert into emp values(7499,'陈二','推销员',7698,'1981-02-20',1600,300,30); +-- insert into emp values(7521,'张三','推销员',7698,'1981-02-22',1250,500,30); +-- insert into emp values(7566,'李四','经理',7839,'1981-04-02',2975,null,20); +-- insert into emp values(7654,'王五','推销员',7698,'1981-09-28',1250,1400,30); +-- insert into emp values(7698,'赵六','经理',7839,'1981-05-01',2850,null,30); +-- insert into emp values(7782,'孙七','经理',7839,'1981-06-09',2450,null,10); +-- insert into emp values(7788,'周八','分析师',7566,'1987-06-13',3000,null,20); +-- insert into emp values(7839,'吴九','总裁',null,'1981-11-17',5000,null,10); +-- insert into emp values(7844,'郑十','推销员',7698,'1981-09-08',1500,0,30); +-- insert into emp values(7876,'郭十一','职员',7788,'1987-06-13',1100,null,20); +-- insert into emp values(7900,'钱多多','职员',7698,'1981-12-03',950,null,30); +-- insert into emp values(7902,'大锦鲤','分析师',7566,'1981-12-03',3000,null,20); +-- insert into emp values(7934,'木有钱','职员',7782,'1983-01-23',1300,null,10); + +1.利用游标,查询并计算出emp表中全公司的总薪资(salary和comm) + +delimiter // +create PROCEDURE salary_sum(out sum _salary double) + begin + declare emp_count int; + declare salary double; + declare com double; + declare sum double default 0; + declare i int default 1; + declare my_salary cursor for select sal,ifnull(comm,0) from emp; + # declare continue handler for 1329 set i = 0; + select count(*) into emp_count from emp; + open my_salary; + while i<= emp_count do + fetch my_salary into salary,com; + set sum = sum + salary + com ; + set i = i+1; + end while; + set sum_salary = sum; + close my_salary; + +end // +delimiter ; + +call salary_sum(@sum); +select @sum; + +# select sum(sal+ifnull(comm,0)) from emp; + +2.利用游标修改表格,如果sal<1000,则删除工资为此值的员工,如果1000 < sal <= 3000,该员工薪资涨100,否则扣工资100