USE houtai;
DELIMITER //
CREATE PROCEDURE phelloword()
BEGIN
SELECT * FROM
admin;
END//
CALL phelloword()
USE houtai;
CREATE PROCEDURE
phelloword()
BEGIN
SELECT
* FROM admin;
END
CALL
phelloword()
在这个问题上我纠缠了很久,在MySQL的命令行工具中执行同样不成功,但是根据提示信息可以知道执行在 SELECT ‘Hello Word!‘
AS F;处结束,后面的END;没有执行,这显然会导致错误。
这里MySQL 5.0需要选择以个分隔符,语法如下:DELIMITER //
分隔符是通知MySQL客户端已经输入完成的符号。一直都是用“;”,但是在存储过程中不行,因为存储过程中很多语句都需要用到分号。
USE houtai;
DELIMITER //
CREATE PROCEDURE phell(p_username CHAR(15))
BEGIN
SELECT * FROM
admin WHERE username =
p_username;
END//
CALL phell("admin")
写一个包括参数,变量,变量赋值,条件判断,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;”即可。
原文:http://www.cnblogs.com/wang3680/p/54092cc3d25352b4239f4ef6d025bf39.html