首页 > 数据库 > MySQL > 正文

MySQL5的存储过程详细实例

2024-07-24 12:38:52
字体:
来源:转载
供稿:网友

本文章来介绍一下关于mysql5的新特性存储过程了,在mysql5之前是没有存储过程这一说的,下面我们来看看mysql5存储过程的用法.

MySQL 5.0:新特性教程是为需要了解5.0版本新特性的MySQL老用户而写的,简单的来说是介绍了“存储过程、触发器、视图、信息架构视图.

格式:

  1. CREATE PROCEDURE 过程名 ([过程参数[,...]]) 
  2. [特性 ...] 过程体 
  3.  
  4. CREATE FUNCTION 函数名 ([函数参数[,...]]) 
  5. RETURNS 返回类型 
  6. [特性 ...] 函数体 

过程参数:[ IN | OUT | INOUT ] 参数名 参数类型

函数参数:参数名 参数类型

返回类型:有效的MySQL数据类型即可

特性:

  1. LANGUAGE SQL 
  2. | [NOT] DETERMINISTIC 
  3. | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } 
  4. | SQL SECURITY { DEFINER | INVOKER } 
  5. | COMMENT 'string' 

过程体/函数体:格式如下:

  1. BEGIN 
  2. 有效的SQL语句 
  3. END 

实例:

  1. DELIMITER $$ 
  2. DROP PROCEDURE IF EXISTS `spTest` $$ 
  3. CREATE PROCEDURE `spTest`(p_title VARCHAR(200), p_description TEXT)  --Vevb.com 
  4. DETERMINISTIC 
  5. BEGIN 
  6. INSERT INTO category (title, description) 
  7. VALUES (p_title, p_description); 
  8. END $$ 
  9. DELIMITER ; 

其中DELIMITER是用来决定SQL分隔符号的,在写Stored Procedure前,要先把预设的分号换掉,写完 Stored Procedure 的 routine_body 后,再回复成预设的分号.

--删除:drop procedure if exists up_common_select

--创建

  1. CREATE  PROCEDURE `up_common_select`( 
  2.  in t_name varchar(50) 
  3. begin 
  4.  declare v_sql varchar(500); 
  5.  set v_sql= concat('select * from ',t_name); 
  6.  select v_sql; 
  7.  -- 

--注意:prepare(预处理)execute stmt using @var,只能跟@var变量,declare和传入的变量不行!!!

  1. set @v_sql=v_sql; 
  2.  
  3.  prepare stmt from @v_sql; 
  4.  EXECUTE stmt ; 
  5.  deallocate prepare stmt; 
  6.  
  7. end

--调用:call up_common_select('admin_authority');

注意事项:

1  mysql5.0.13之后支持在存储过程中调用prepare

2, prepare stmt from 'select * from ?';(错)

mysql5.0.24,prepare尚不支持 表名做变量!

解决方案:用 contat()函数,组合字符串

3. execute stmt [using @var,@var2]

必须是@var形式的变量,传入的参数变量,declare变量不行

4.deallocate prepare stmt; 显式的释放prepare,如果不释放,mysql会释放,!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表