首页 > 其他 > 详细

存储过程-使用(二)

时间:2014-06-12 23:48:15      阅读:671      评论:0      收藏:0      [点我收藏+]

一、查询

1、简单的无参数的查询

bubuko.com,布布扣我的数据库为后台,里面有表admin
下面就我进行对admin表查询。
USE houtai;
DELIMITER //
CREATE PROCEDURE phelloword()
BEGIN
SELECT * FROM admin;
END//
CALL phelloword()
执行后的截图如下:
bubuko.com,布布扣
这里我在执行的时候呢,出现过下面的错误,我之前的sql语句是这样写的:
USE houtai;
CREATE PROCEDURE phelloword()
BEGIN
SELECT * FROM admin;
END
CALL phelloword()
出现如下错误:
bubuko.com,布布扣
耗费了我好多时间去解决,然后从百度中看见了这个说明:

在这个问题上我纠缠了很久,在MySQL的命令行工具中执行同样不成功,但是根据提示信息可以知道执行在 SELECT ‘Hello Word!‘ AS F;处结束,后面的END;没有执行,这显然会导致错误。

这里MySQL 5.0需要选择以个分隔符,语法如下:DELIMITER //

分隔符是通知MySQL客户端已经输入完成的符号。一直都是用“;”,但是在存储过程中不行,因为存储过程中很多语句都需要用到分号。

 2、带参数的存储过程

?写一个包括参数的存储过程:
USE houtai;
DELIMITER //
CREATE PROCEDURE phell(p_username CHAR(15))
BEGIN
SELECT * FROM admin WHERE username = p_username;
END//
CALL phell("admin")
这里定义参数p_username 然后我们往函数中传递一个值,来进行查询,结果如下:
bubuko.com,布布扣

3、写一个包括参数,变量,变量赋值,条件判断,UPDATE语句,SELECT返回结果集的完整的一个存储过程

写一个包括参数,变量,变量赋值,条件判断,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;”即可。


 









存储过程-使用(二),布布扣,bubuko.com

存储过程-使用(二)

原文:http://www.cnblogs.com/wang3680/p/54092cc3d25352b4239f4ef6d025bf39.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!