mysql 的储存过程

0 0 691

常见的mysql客户端phpmyadmin低版本不支持储存过程(高版本还不知道),你可以用命令行或Navicat for MySQL运行下面的sql

例子1:

DELIMITER //
create procedure  show_pro(in id integer,out s varchar(20))
begin
declare s varchar(20);
if (length(id)=11) then select ‘A_B_C_D’ into s;
elseif(length(id)=8) then select ‘A_B_C’ into s;
elseif(length(id)=5) then select ‘A_B’ into s;
elseif(length(id)=2) then select ‘A’ into s;
end if;
select s;
end;
//

 

调用方法: call  show_pro(11,@aa);//

1

 

例子2:

DELIMITER //
create procedure proc_name (in parameter integer)
begin
declare variable varchar(20);
if parameter=1 then
set variable=’MySQL’;
else
set variable=’PHP’;
end if;
select variable;
end;
//

调用:call  proc_name(1);//

 

在写两个复杂一点的例子:

delimiter //
create procedure changeuserpassword
(IN p_userid INT ,IN p_useroldpw VARCHAR(50),IN p_usernewpw VARCHAR(50), OUT p_retcode VARCHAR(20))
BEGIN
declare tmp_useroldpw varchar(50) ;
select password into tmp_useroldpw from user_info where id = p_userid;
IF tmp_useroldpw IS NOT NULL THEN
IF tmp_useroldpw = p_useroldpw THEN
update user_info set password = p_usernewpw where id = p_userid;
SET p_retcode =’1′;
ELSE
SET p_retcode=’-1′;
END IF;
ELSE
SET p_retcode = ‘-2′;
END IF;
END;
//
delimiter //
create procedure updateuserlogonstate(IN p_userid INT ,IN p_clienttype VARCHAR(20),IN p_sessionid VARCHAR(50))
BEGIN
declare tmp_sessionid varchar(50) ;
SELECT sessionid  INTO tmp_sessionid FROM user_logon_state WHERE id =p_userid AND clienttype=p_clienttype ;
IF tmp_sessionid IS NOT NULL THEN
UPDATE user_logon_state SET sessionid=p_sessionid  WHERE id=p_userid AND clienttype=p_clienttype;
ELSE
INSERT INTO user_logon_state (id,sessionid,clienttype)values(p_userid,p_sessionid,p_clienttype);
END IF;
END;
//

留言

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>