时间:2021-05-23
use test;drop table if exists t8;CREATE TABLE t8(s1 INT,PRIMARY KEY(s1));drop procedure if exists handlerdemo;DELIMITER $$CREATE PROCEDURE handlerdemo()BEGINdeclare xx int default 4;DECLARE oh_no condition for sqlstate '23000';#DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1;declare exit handler for oh_no set @info='违反主键约束';SET @X=1;INSERT INTO t8 VALUES(1);SET @X=2;INSERT INTO t8 VALUES(1);SET @X=3;END
调用存储过程
CALL handlerdemo();SELECT @X,@info;心得体会:
1、语句结束符
也许mysql是将存储过程、自定义函数看作一条语句的,因此,存储过程里多条语句用“;”隔开,为了避免冲突,就要用delimiter 重新定义结束符。
一般可以在存储过程开始前,定义新的结束符,如
delimiter //
存储过程书写完毕以后,再恢复定义:delimiter ;
但也可以在存储过程开始前,这样写 delimiter $$,但存储过程后不可以再写别的语句了。如上面的例子
2、变量
mysql的变量,跟SQL SERVER一样,形如 @X ,但无需声明,直接使用。
而在存储过程里面,变量无须用 @,但要声明。并且声明要放在存储过程的头部(?),如本例,否则报错。真奇怪啊,一方面,有时候变量无须声明就可以使用,另一方面,有时候又要限定声明位置,令人无所适从,似乎随便了点。
存储过程内部的变量,作用范围仅限于存储过程。但那些带@的变量,却仿佛可以跨越会话和连接,看上去是全局变量?如上面的例子。
3、条件和处理
定义条件,是为了给处理调用。如上面的例子:
DECLARE oh_no condition for sqlstate '23000';#DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1;declare exit handler for oh_no set @info='违反主键约束';声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了mysql存储过程原理与用法。分享给大家供大家参考,具体如下:本文内容:什么是存储过程存储过程的创建存储过程的使用查看存储过程修改存储过程删除存储
本文实例分析了php调用mysql存储过程的方法。分享给大家供大家参考。具体分析如下:Mysql存储过程创建语法,代码如下:CREATEPROCEDURE和CR
本文实例讲述了php中调用执行mysql存储过程然后返回由存储过程返回的值,分享给大家供大家参考。具体分析如下:调用存储过程的方法.a。如果存储过程有IN/IN
本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下:mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有IN
MySQL存储过程14.1.1创建存储过程MySQL中,创建存储过程的基本形式如下:CREATEPROCEDUREsp_name([proc_parameter