From a3d70407ae169339abaf0f39d9bbdf4308a9dbe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A8=8A=E5=B0=8F=E9=83=AD?= <2966479092@qq.com> Date: Thu, 12 Oct 2023 11:59:55 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=B9=9D=E6=AC=A1=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...60\345\217\212\344\275\234\344\270\232.md" | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 "47 \346\250\212\345\260\217\351\203\255/20231011 \346\225\260\346\215\256\345\272\223\351\253\230\347\272\247\347\254\224\350\256\260\345\217\212\344\275\234\344\270\232.md" diff --git "a/47 \346\250\212\345\260\217\351\203\255/20231011 \346\225\260\346\215\256\345\272\223\351\253\230\347\272\247\347\254\224\350\256\260\345\217\212\344\275\234\344\270\232.md" "b/47 \346\250\212\345\260\217\351\203\255/20231011 \346\225\260\346\215\256\345\272\223\351\253\230\347\272\247\347\254\224\350\256\260\345\217\212\344\275\234\344\270\232.md" new file mode 100644 index 0000000..eb98154 --- /dev/null +++ "b/47 \346\250\212\345\260\217\351\203\255/20231011 \346\225\260\346\215\256\345\272\223\351\253\230\347\272\247\347\254\224\350\256\260\345\217\212\344\275\234\344\270\232.md" @@ -0,0 +1,164 @@ +# 笔记 + +### 存储函数的使用 + +语法格式: + +create function 函数名(参数名 参数类型...) + +returns 返回值类型 + +[characteristics...] + +begin + +函数体 #函数体中肯定有return语句 + +end + +-- 函数返回值,只能返回一个(函数能做的事,过程也能做) + + + +function参数形式只有一个默认in,不用写 + + + +-- 建一个存储函数function + +delimiter // + +create function f_abc(参数名称 数据类型,...) + +returns 结果的数据类型 + +-- 如果return(出现了SQL语句)就一定要写contains sql + +deterministic + +contains sql + +begin + +​ return(一般是select语句,只有一行一列的结果,但也可以是其他明确的某个值) + +end // + +delimiter; + + + +### 游标(或光标) + +delimiter // + +create procedure p_cursor() + +begin --定义变量来接收游标产生的值,注意,变量的定义要放在游标的定义之前 + +​ declare a1 int; + +​ declare a2 varchar(20); + +​ -- 定义游标 + +​ declare youbiao cursor for select * from emplayees; + +​ -- 打开游标 + +​ open youbiao + +​ -- 使用游标 + +​ -- fetch 游标名 into 变量1 变量...(变量的类型,位置和数量要由定义游标时的select得到的列的数列位置和类型决定) + +​ fetch youbiao into a1; -- 每fetch一次游标就从结果集中下移一行 + +​ -- 关闭游标 + +​ close youbiao; + +end // + + + +### 条件处理程序 + +语法: + +declare handler_action(程序处理方式) handler for condition_value(条件值)... statement(处理语句); + + + +# 作业 + +~~~mysql +-- -- 部门表 + create database maidui charset utf8; + use maidui; + 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); + + +-- 2.利用游标修改表格,如果sal<1000,则删除工资为此值的员工,如果1000 < sal <= 3000,该员工薪资涨100并将该员工的信息放在新表中,否则扣工资100 +drop procedure youbiao; +delimiter // +create procedure youbiao() +begin + declare id int; + declare nsal int; + declare i int default 1; + declare num1 cursor for select empno,sal from emp; + declare continue handler for 1329 set i=2; + open num1; + create table if not exists xinbiao( + empno int primary key auto_increment,-- 员工编号 + sal int -- 薪水 + ); + while i=1 do + fetch num1 into id,nsal; + if nsal<1000 then delete from emp where empno=id; + elseif 1000=3000 then update emp set sal=sal+100 where empno=id; + insert into xinbiao values(id,nsal); + else update emp set sal=sal-100 where empno=id; + end if; + end while; + close num1; +end // +delimiter ; +call II(); +select * from xinbiao; +~~~ \ No newline at end of file -- Gitee