当前位置:  数据库>mysql

mysql心得分享:存储过程

    来源: 互联网  发布时间:2014-10-16

    本文导语:  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 '2300...

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='违反主键约束';


    
 
 

您可能感兴趣的文章:

  • java将类序列化并存储到mysql(使用hibernate)
  • MySQL存储引擎 MySQL Maria
  • mysql 存储过程实例和基本语法
  • MYSQL存储过程里代返回值的存储过程怎么写
  • MySQL存储引擎 Spider For MySQL
  • MySQL存储引擎 MyISAM
  • 更改Mysql数据库存储位置的具体步骤
  • MySQL存储引擎 Q4M
  • MySQL5创建存储过程的示例
  • MySQL 存储引擎 XtraDB
  • MySQL 存储引擎 CascaDB
  • mysql动态游标学习(mysql存储过程游标)
  • 怎么修改linux centOS的mysql 的数据存储路径
  • MySQL存储引擎 OQGRAPH
  • MySQL 存储引擎 Mroonga
  • MySQL 高性能存储引擎 TokuDB
  • C# 中调用 MySQL 存储过程的示例代码
  • C# 调用 MySQL 存储过程的代码
  • 请教各位大侠,在windows环境下的mysql 存储过程、视图在linux下是否都能运行?
  • 想写个shell脚本调用mysql的存储过程,怎么改都执行不了。。。
  • 如何用java对mysql存储文件
  • 与MSSQL对比学习MYSQL的心得(三)--查看字段的长度
  • 与MSSQL对比学习MYSQL的心得(四)--BLOB数据类型
  • 与MSSQL对比学习MYSQL的心得(二)--显示宽度
  • mysql 常见命令和学习心得
  • mysql主从服务器同步心得体会第1/2页
  • 与MSSQL对比学习MYSQL的心得(一)--基本语法
  • 与MSSQL对比学习MYSQL的心得(五)--运算符
  • MySql学习心得之存储过程
  • 与MSSQL对比学习MYSQL的心得(八)--插入 更新 删除
  • mysql数据库优化总结(心得)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql安装过程中的错误
  • linux上装mysql过程中有错误
  • mysql 精简过程(删除一些文件)
  • Mysql存储过程和函数区别介绍
  • MySQL 存储过程中执行动态SQL语句的方法
  • mysql 存储过程输入输出参数示例
  • mysql 查询数据库中的存储过程与函数的语句
  • 装了red hat linux,安装过程中选了apache和mysql的安装
  • MySQL DNS的使用过程详细分析
  • mysql存储过程实例
  • jdbc调用mysql存储过程实现代码
  • mysql 导入导出数据库以及函数、存储过程的介绍
  • MySQL存储过程相互调用并获得错误码示例
  • MySQL 有输入输出参数的存储过程实例
  • 我装了linux后,如果知道我机器里装了些什么软件,如php,mysql之类?我在安装过程中看到linux的确把这些安装到了我机器里,但我如何看,
  • mysql 让一个存储过程定时作业的代码
  • 基于mysql事务、视图、存储过程、触发器的应用分析
  • mysql存储过程中使用游标的实例
  • mysql多次调用存储过程的问题
  • WEB前端 iis7站长之家
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 在 linux下输入"mysql"命令,进入mysql命令行,但出现“Can't connetc to local MySQL server thuough socket /var/lib/mysql/mysql.sock
  • Mysql查询错误:ERROR:no query specified原因
  • MySQL 重装MySQL后, mysql服务无法启动
  • php安装完成后如何添加mysql扩展
  • 为什么用linux安装盘安装了mysql后,启动mysql,提示找不到mysql.sock文件?
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • 請教,在redhat linux7.2+mysql 中,系統提示mysql已啟動,網頁卻不能訪問mysql?
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • 求解释: useradd -g mysql mysql -d /home/mysql -s /sbin/nologin
  • MySQL Workbench的下载安装与使用教程


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3