当前位置:Gxlcms > mysql > mysql心得分享:存储过程

mysql心得分享:存储过程

时间:2021-07-01 10:21:17 帮助过:34人阅读

use test;

drop table if exists t8;
CREATE TABLE t8(s1 INT,PRIMARY KEY(s1));

drop procedure if exists handlerdemo;

DELIMITER $$
CREATE PROCEDURE handlerdemo()
BEGIN
declare 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='违反主键约束';

您可能感兴趣的文章:

  • mysql中存储过程、函数的一些问题
  • mysql 查询数据库中的存储过程与函数的语句
  • 深入mysql创建自定义函数与存储过程的详解
  • mysql 导入导出数据库以及函数、存储过程的介绍
  • Mysql存储过程和函数区别介绍
  • Mysql存储过程循环内嵌套使用游标示例代码
  • mysql 存储过程输入输出参数示例
  • Mysql存储过程中游标的用法实例
  • MySQL存储过程的异常处理方法
  • MySQL存储过程中实现执行动态SQL语句的方法
  • MySql存储过程与函数详解

人气教程排行