mysql存储过程 两种写法的区别!大家讨论上

mysql存储过程 两种写法的区别!大家讨论下

第一种写法:

drop procedure if exists Pros_Account_1;

create procedure Pros_Account_1

(

_accountId int

)

BEGIN

if exists(select 1 from `user` u where u.AccountID=_accountId) 

then

select @userId:=ID from `user` where AccountID=_accountId;

if exists(select 1 from items where ItemInfoID=1063 and userId=@userId)

then

select @ItemsiD:=ID from items where ItemInfoID=1063 and userId=@userId;

update items set ItemNum=ItemNum+1 where ID=@ItemsiD;

select @ItemsiD;

else

insert into items(IteminfoId,userId,ItemNum)

values

(1063,@userId,1);

end if;

end if;

END;

drop procedure if exists Pros_Account;

create procedure Pros_Account()

BEGIN

— 定义变量

  declare done1 int default 0;

  declare a int;

declare b int default 1;

  — Cursor one to get the group total 定义游标

  declare cur1 cursor for select id from account where DATE_FORMAT(Regtime,’%Y-%m-%d %H:%i:%s’)< DATE_FORMAT(‘2011-03-18 12:00:00′,’%Y-%m-%d %H:%i:%s’);

— 游标异常处理

  declare continue handler for 1329 set done1 = 1;

  — Temporary table to save the result.

— 打开游标

  open cur1;

set autocommit=0;

— 开始循环 

  while done1 != 1

  do

  fetch cur1 into a;

call Pros_Account_1(a);

set b=b+1;

— 结束循环

  end while;

select b;

COMMIT;

— 关闭游标

  close cur1;

end;

第二种写法:

DROP PROCEDURE `Pros_Account_bobby`;

DELIMITER ;;

/*!50003 CREATE*/ /*!50020 DEFINER=`galaxy`@`%`*/ /*!50003 PROCEDURE `Pros_Account_bobby`( IN InputAccountID int )

BEGIN

DECLARE ProcUserID INT DEFAULT 0;

DECLARE ProcItemID INT DEFAULT 0;

DECLARE ProcCounter INT DEFAULT 0;

SELECT COUNT(*), IFNULL(ID,0) INTO ProcCounter, ProcUserID FROM user WHERE AccountID = InputAccountID;

IF ( ProcUserID > 0 ) THEN 

SELECT COUNT(*), IFNULL(ID,0) INTO ProcCounter, ProcItemID FROM items WHERE ItemInfoID = 1063 AND UserID = ProcUserID LIMIT 1;

IF ( ProcItemID > 0 ) THEN 

UPDATE items SET ItemNum = ItemNum + 1 WHERE ID = ProcItemID;

ELSE

INSERT INTO items ( `ItemInfoID`, `UserID`, `ItemNum` ) VALUES ( 1063, ProcUserID, 1);

END IF;

END IF;

END */;;

DROP PROCEDURE `Pros_Account_bobby_main`;

DELIMITER ;;

/*!50003 CREATE*/ /*!50020 DEFINER=`galaxy`@`%`*/ /*!50003 PROCEDURE `Pros_Account_bobby_main`()

BEGIN

DECLARE FINISHDONE TINYINT DEFAULT 0;

DECLARE SendAccountID INT DEFAULT 0;

DECLARE RepeatCount INT DEFAULT 0;

DECLARE SELECTRESULT1 CURSOR FOR SELECT ID FROM account WHERE RegTime < ‘2011-03-18 12:00:00’ AND ID != ‘-1’ AND ID != ‘8139’;

DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET FINISHDONE = 1;

SET FINISHDONE = 0;

OPEN SELECTRESULT1;

REPEAT

FETCH SELECTRESULT1 INTO SendAccountID;

CALL `Pros_Account_bobby` ( SendAccountID );

SET RepeatCount = RepeatCount + 1;

UNTIL FINISHDONE = 1 END REPEAT;

CLOSE SELECTRESULT1;

SELECT RepeatCount;

END */;;

大家说说这两种写法有什么区别啊!



引用第一种:

if exists(select 1 from `user` u where u.AccountID=_accountId)

then

select @userId:=ID from `user` where AccountID=_accountId;

第二种

SELECT COUNT(*), IFNULL(ID,0) INTO ProcCounter, ProcUserID FROM user WHERE AccountID = InputAccountID;

IF ( ProcUserID > 0 ) THEN




探讨

这两种写法有什么区别呢??

mysql存储过程 两种写法的区别!大家讨论上

相关文章:

你感兴趣的文章:

标签云: