• 存储过程-使用(二)


    一、查询

    1、简单的无参数的查询

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

    在这个问题上我纠缠了很久,在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 然后我们往函数中传递一个值,来进行查询,结果如下:

    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;”即可。


     









  • 相关阅读:
    IE hack [if IE]解决IE CSS 兼容问题
    jQuery重要插件、JS辅助工具
    几个jQueryUI框架
    推荐书籍
    Win7下用原生的ie6调试网页
    Code First :使用Entity. Framework编程(3)
    Code First :使用Entity. Framework编程(6)
    JSON数据格式转换
    Code First :使用Entity. Framework编程(5)
    Code First :使用Entity. Framework编程(4)
  • 原文地址:https://www.cnblogs.com/wang3680/p/54092cc3d25352b4239f4ef6d025bf39.html
Copyright © 2020-2023  润新知