[b]首先看MySQL 5.0参考手册中关于创建存储过程的语法说明:
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
type:
Any valid MySQL data type
characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
routine_body:
Valid SQL procedure statement
如果你对MySQL还不太熟悉的话,单单看这个语法结构当然不足以进行MySQL存储过程编程。我之前基本都是使用MS SQL SERVER,所以以下记录我熟悉MySQL存储过程的过程,也是重点介绍MS SQL SERVER与MySQL区别较大的地方。
第一步,当然是写个Hello Word的存储过程,如下:
CREATE PROCEDURE phelloword()
BEGIN
SELECT 'Hello Word!' AS F;
END;
将上面创建phelloword存储过程的语句拷到phpMyAdmin中执行,报如下错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
在这个问题上我纠缠了很久,在MySQL的命令行工具中执行同样不成功,但是根据提示信息可以知道执行在 SELECT 'Hello Word!' AS F;处结束,后面的END;没有执行,这显然会导致错误。
这里需要选择以个分隔符,语法如下:DELIMITER //
分隔符是通知MySQL客户端已经输入完成的符号。一直都是用“;”,但是在存储过程中不行,因为存储过程中很多语句都需要用到分号。
因此上面的存储过程改为:
CREATE PROCEDURE ptest()
BEGIN
SELECT 'Hello Word!' AS F;
END //
另外在phpMyAdmin中执行时,在Delimiter文本框中填写 //,这次存储过程即可创建成功。
第二步,写一个包括参数,变量,变量赋值,条件判断,UPDATE语句,SELECT返回结果集的完整的一个存储过程,如下:
CREATE PROCEDURE plogin
(
p_username char(15),
p_password char(32),
p_ip char(18),
p_logintime datetime
)
LABEL_PROC:
BEGIN
DECLARE v_uid mediumint(8);
DECLARE v_realpassword char(32);
DECLARE v_nickname varchar(30);
DECLARE v_oltime smallint(6);
SELECT u.uid, u.password, f.nickname, u.oltime INTO v_uid,v_realpassword, v_nickname, v_oltime
FROM cdb_members u INNER JOIN cdb_memberfields f ON f.uid = u.uid WHERE u.username = p_username;
IF (v_uid IS NULL) THEN
SELECT 2 AS ErrorCode;
LEAVE LABEL_PROC;
END IF;
IF (p_password <> v_realpassword) THEN
SELECT 3 AS ErrorCode;
LEAVE LABEL_PROC;
END IF;
UPDATE ipsp_userexpands SET lastloginip = p_ip, lastlogintime = p_logintime WHERE uid = v_uid;
SELECT 0 AS ErrorCode, v_uid AS uid, v_nickname AS nickname, v_oltime AS oltime;
END LABEL_PROC //
首先要说的是给变量赋值的语法,MySQL中使用SELECT u.uid, u.password, f.nickname, u.oltime INTO v_uid, v_realpassword, v_nickname, v_oltime FROM cdb_members u INNER JOIN cdb_memberfields f ON f.uid = u.uid WHERE u.username = p_username;这种方式给变量赋值。
其次是条件判断的语法结构,如下所示:
IF ... THEN
...;
ELSE
IF ... THEN
...;
ELSEIF
...;
ELSE
...;
END IF;
END IF;
最后说说LEAVE 语法的使用。当满足某种条件,不继续执行下面的SQL时,在MS SQL SERVER中使用RETURN语法,在MySQL中我没有找到对应的关键字,但是这里可以利用LEAVE语法来满足要求,在存储过程的BEGIN前定义一个标签,如:“LABEL_PROC:” 然后再需要用到RETURN中断执行的地方执行“LEAVE LABEL_PROC;”即可。
第三步,创建一个执行动态SQL的存储过程。
CREATE PROCEDURE ipsp_getresourcedir
(
p_hashcode char(40)
)
LABEL_PROC:
BEGIN
DECLARE v_sql varchar(200);
SET v_sql = CONCAT('SELECT filedir FROM ipsp_resources WHERE hashcode =\'', p_hashcode, '\' LIMIT 0, 1');
SET @sql = v_sql;
PREPARE sl FROM @sql;
EXECUTE sl;
DEALLOCATE PREPARE sl;
END LABEL_PROC //
这里提一下 “\”是转义字符,拼接成的SQL类似 SELECT filedir FROM ipsp_resources WHERE hashcode ='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' LIMIT 0, 1
另外@sql这个属于用户变量,具体用法请查询MySQL参考手册。
如果有在MS SQL SERVER上编写存储过程的经验的话,看完这些,我想基本的MySQL存储过程编程应该可以应付了吧!
想了解更多的内容可查询MySQL参考手册或者相关书籍!
[/b]
分享到:
相关推荐
MySQL 5.0 存储过程编程入门是数据库管理领域中的一个重要话题,它涉及到数据库的高级功能,使得数据库系统能够执行复杂的逻辑操作,提高数据处理的效率和安全性。存储过程是一组预先编译的SQL语句,可以在需要时被...
小题大做的解释和造句.doc
初中语文文摘社会马其顿人的小题大做
当然还可以添加一些其他功能,不过都是些类似的代码,用面向对象的思想(个人感觉在web编程里asp.net最能体现C#面向对象的风格)又感觉小题大做,就省了! 开发语言:C# 开发环境:VS2008+Access 这个系统还有...
学院管理层没有将此事视作无足轻重的小题大做,而是从中看到了尊重和关怀每个个体的重要性。这种态度表明,无论是大型的IT项目还是日常生活中的小细节,都需要我们保持一种认真负责的态度。因为正是这些看似不起眼的...
其中一个有效策略是“小题大做,以大写小”。这种方法强调通过深入挖掘和扩展看似平常的题材,使之蕴含更深远的主题,从而提升文章的思想内涵。 1. **小题目大做**: - **状物类小题大做**:以常见的事物为切入点...
通过“小题大做”,教师可以设计教学活动,使学生在解决问题的过程中自然而然地培养这些素养。 4. **案例分析**: 文中以高三复习中的函数题目为例,展示了如何开展“一道题一节课”。教师首先呈现题目,然后引导...
新概念英语1A练习册知识点总结 本资源摘要信息涵盖了新概念英语1A练习册的主要知识点,包括词汇、语法、阅读、写作等方面。 词汇 1. family /ˈfæmɪli/:家庭 2. nice /naɪs/:高兴、 Nice to meet you.(很...
13. **复数的实部与虚部**:题目要求找到复数z的实部和虚部之和,需要根据复数的定义进行计算。 14. **函数图像上的点**:点在函数图像上意味着点的坐标满足函数的方程,可以通过代入法求解。 15. **函数图像的平...
创意四大方向包括:小题大做、大题小做、借题发挥和无中生有,强调在不同情境中创新应用。\n\n思考题:理解创造力的含义,探讨创意的来源和如何激发个人的创意潜力。\n\n二、直线思维与放射思维\n\n直线思维是逻辑性...
【散步教案】作为教育领域的一个设计,不仅关注文本的表层阅读,更深入探讨了文章的深层含义及写作技巧,其主要目的不仅在于让学生理解作者如何巧妙运用“大词小用”、“小题大做”和“蕴藉之美”的概念,更在于引导...
本论文主要探讨了 Flash 动画制作的一部公益短片《江雪》的创作过程和环境保护的重要性,旨在唤醒人们对环境保护的意识,激发出人们对自然之美的追求和渴望。 Flash 动画制作是一种非常流行的动画格式,具有体积小...
创意四大方向包括小题大做、大题小做、借题发挥和无中生有,强调从不同角度看待问题和寻找解决方案。 二、直线思维与放射思维 直线思维遵循逻辑和规则,而放射思维则是发散性思考,鼓励跳出常规。通过一系列数字...
17.2 文件存储管理 .217 17.3 读 写 文 件 .222 17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 ...
例如,温州人的创业精神体现在他们的吃苦耐劳、敢于冒险和不断创新上,他们能够从无到有,将小生意发展为知名品牌,体现了“小题大做”的智慧。 硅谷的创业精神则更强调颠覆性的创新和快速行动。在这里,创业者们...
10. **成果评估与调整**:在推动过程中和结束后,对效果进行评估,分析不完善之处,提出改进措施。 业务推动的技巧涵盖多种方法,如借口经营、小动作大情趣、小题大做、参与式经营、活动举办和效率分析等。这些技巧...
【全国通用2016版高考数学大二轮总复习增分策略第二篇第...同时,提高准确性和速度,避免“小题大做”,注重解题策略的选择,以达到增分的效果。在备考过程中,不断练习和总结,提升解题技巧,是提高填空题得分的关键。
小学数学业务学习是一个持续发展的过程,要求教师不仅仅是教学者,更是学习者和研究者。在当前新课程改革的背景下,教师需要将理念转化为实践,教材转化为个人的教学风格,以适应不断变化的教育环境和学生需求。 ...
在广泛阅读和积累资料的过程中,充分利用专业数据库,同时注意“选题新、方法新、资料新”的三新原则,无论是新题新做还是小题大做,都要力求观点独特,内容充实。 撰写实验研究论文时,需明确论文类型(如原著、...
3. 避免小题大做,节省时间应对更复杂的解答题。 4. 在解答过程中,要注意逻辑的严密性和计算的准确性。 通过以上解析,我们可以看到,高考数学选择题的解题技巧主要包括对题目的深入理解、对选择支的合理利用和...