存储过程(带有逻辑的sql语句)

xiaoxiao2021-02-28  19

创建存储过程 DELIMITER CREATEPROCEDUREprotest()()BEGINsql;sql+SELECTFROMemployee;END – 声 明 存 储 过 程 的 结 束 符 C R E A T E P R O C E D U R E p r o t e s t ( ) – 存 储 过 程 名 称 ( 参 数 列 表 ) B E G I N – 开 始 – 可 以 写 多 个 s q l 语 句 ; – s q l 语 句 + 流 程 控 制 S E L E C T ∗ F R O M e m p l o y e e ; E N D – 结束 结束符

– 执行存储过程 CALL pro_test(); – CALL 存储过程名称(参数); 000 参数: IN: 表示输入参数,可以携带数据带存储过程中 OUT: 表示输出参数,可以从存储过程中返回结果 INOUT: 表示输入输出参数,既可以输入功能,也可以输出功能

– ****三、存储过程*********- – 声明结束符 – 创建存储过程 DELIMITER CREATEPROCEDUREprotest()BEGINsql;SELECTFROMemployee;END C R E A T E P R O C E D U R E p r o t e s t ( ) B E G I N – 可 以 写 多 个 s q l 语 句 ; S E L E C T ∗ F R O M e m p l o y e e ; E N D

– 执行存储过程 CALL pro_test();

– 3.1 带有输入参数的存储过程 – 需求:传入一个员工的id,查询员工信息 DELIMITER CREATEPROCEDUREprofindById(INeidINT)IN:BEGINSELECTFROMemployeeWHEREid=eid;END C R E A T E P R O C E D U R E p r o f i n d B y I d ( I N e i d I N T ) – I N : 输 入 参 数 B E G I N S E L E C T ∗ F R O M e m p l o y e e W H E R E i d = e i d ; E N D

– 调用 CALL pro_findById(4);

– 3.2 带有输出参数的存储过程 DELIMITER CREATEPROCEDUREprotestOut(OUTstrVARCHAR(20))OUTBEGINSETstr=helljava;END C R E A T E P R O C E D U R E p r o t e s t O u t ( O U T s t r V A R C H A R ( 20 ) ) – O U T : 输 出 参 数 B E G I N – 给 参 数 赋 值 S E T s t r = ′ h e l l j a v a ′ ; E N D

– 删除存储过程 DROP PROCEDURE pro_testOut; – 调用 – 如何接受返回参数的值?? – mysql的变量*** – 全局变量(内置变量):mysql数据库内置的变量 (所有连接都起作用) – 查看所有全局变量: show variables – 查看某个全局变量: select @@变量名 – 修改全局变量: set 变量名=新值 – character_set_client: mysql服务器的接收数据的编码 – character_set_results:mysql服务器输出数据的编码

– 会话变量: 只存在于当前客户端与数据库服务器端的一次连接当中。如果连接断开,那么会话变量全部丢失! – 定义会话变量: set @变量=值 – 查看会话变量: select @变量

– 局部变量: 在存储过程中使用的变量就叫局部变量。只要存储过程执行完毕,局部变量就丢失!!

– 1)定义一个会话变量name, 2)使用name会话变量接收存储过程的返回值 CALL pro_testOut(@NAME); – 查看变量值 SELECT @NAME;

– 3.3 带有输入输出参数的存储过程 DELIMITER CREATEPROCEDUREprotestInOut(INOUTnINT)INOUTBEGINSELECTn;SETn=500;END C R E A T E P R O C E D U R E p r o t e s t I n O u t ( I N O U T n I N T ) – I N O U T : 输 入 输 出 参 数 B E G I N – 查 看 变 量 S E L E C T n ; S E T n = 500 ; E N D

– 调用 SET @n=10;

CALL pro_testInOut(@n);

SELECT @n;

– 3.4 带有条件判断的存储过程 – 需求:输入一个整数,如果1,则返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他数字,返回“错误输入”; DELIMITER CREATEPROCEDUREprotestIf(INnumINT,OUTstrVARCHAR(20))BEGINIFnum=1THENSETstr=;ELSEIFnum=2THENSETstr=;ELSEIFnum=3THENSETstr=;ELSESETstr=;ENDIF;END C R E A T E P R O C E D U R E p r o t e s t I f ( I N n u m I N T , O U T s t r V A R C H A R ( 20 ) ) B E G I N I F n u m = 1 T H E N S E T s t r = ′ 星 期 一 ′ ; E L S E I F n u m = 2 T H E N S E T s t r = ′ 星 期 二 ′ ; E L S E I F n u m = 3 T H E N S E T s t r = ′ 星 期 三 ′ ; E L S E S E T s t r = ′ 输 入 错 误 ′ ; E N D I F ; E N D

CALL pro_testIf(4,@str);

SELECT @str;

– 3.5 带有循环功能的存储过程 – 需求: 输入一个整数,求和。例如,输入100,统计1-100的和 DELIMITER CREATEPROCEDUREprotestWhile(INnumINT,OUTresultINT)BEGINDECLAREiINTDEFAULT1;DECLAREvsumINTDEFAULT0;WHILEi<=numDOSETvsum=vsum+i;SETi=i+1;ENDWHILE;SETresult=vsum;END C R E A T E P R O C E D U R E p r o t e s t W h i l e ( I N n u m I N T , O U T r e s u l t I N T ) B E G I N – 定 义 一 个 局 部 变 量 D E C L A R E i I N T D E F A U L T 1 ; D E C L A R E v s u m I N T D E F A U L T 0 ; W H I L E i <= n u m D O S E T v s u m = v s u m + i ; S E T i = i + 1 ; E N D W H I L E ; S E T r e s u l t = v s u m ; E N D

DROP PROCEDURE pro_testWhile;

CALL pro_testWhile(100,@result);

SELECT @result;

USE day16;

– 3.6 使用查询的结果赋值给变量(INTO) DELIMITER CREATEPROCEDUREprofindById2(INeidINT,OUTvnameVARCHAR(20))BEGINSELECTempNameINTOvnameFROMemployeeWHEREid=eid;END C R E A T E P R O C E D U R E p r o f i n d B y I d 2 ( I N e i d I N T , O U T v n a m e V A R C H A R ( 20 ) ) B E G I N S E L E C T e m p N a m e I N T O v n a m e F R O M e m p l o y e e W H E R E i d = e i d ; E N D

CALL pro_findById2(1,@NAME);

SELECT @NAME;

转载请注明原文地址: https://www.6miu.com/read-2629068.html

最新回复(0)