1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > mysql 过程 临时表_在存储过程mysql中创建临时表

mysql 过程 临时表_在存储过程mysql中创建临时表

时间:2020-04-11 11:18:50

相关推荐

mysql 过程 临时表_在存储过程mysql中创建临时表

我有SQL Server的经验。这是我第一次使用mysql。我想在存储过程中创建一个临时表。我不知道我在这里错过了什么。

我想做的是:

循环遍历事件及其匹配项,并将这些匹配项插入到临时表中,然后从该临时表返回结果。

这是我的存储过程代码。

CREATE DEFINER=`root`@`localhost` PROCEDURE `APP_GetMatchListbyScoreboardOperatorID`(SOID int)

BEGIN

DECLARE eventid INT DEFAULT NULL;

DECLARE done1, done2 BOOLEAN DEFAULT FALSE;

DECLARE eventname varchar(500);

DECLARE eventdate varchar(100);

DECLARE numberOfMats int;

DECLARE backgroundLogo varchar(1500);

DECLARE categoryid int;

DECLARE categoryname varchar(500);

DECLARE sheettitle varchar(2000);

DECLARE matchid int;

DECLARE bracketmatchid int;

DECLARE parentid int;

DECLARE competitor1 long;

DECLARE competitor2 long;

DECLARE round int;

DECLARE matcheStatusDisplay varchar(500);

DECLARE sheetid long;

DECLARE matnumber int;

DECLARE starttime float;

DECLARE duration_category long;

DECLARE categorytimelimit int;

DECLARE numberoffights_category int;

CREATE TEMPORARY TABLE TempTable (eventid int) ;

#DECLARE done TINYINT DEFAULT FALSE;

-- declare a cursor to select the desired columns from the desired source table1

-- the input argument (which you might or might not need) is used in this example for row selection

DECLARE cursor_events -- cursor1 is an arbitrary label, an identifier for the cursor

CURSOR FOR SELECT EventId FROM scoreboardoperatoreventmapping WHERE ScoreboardOperatorID =SOID;

-- this fancy spacing is of course not required; all of this could go on the same line.

-- a cursor that runs out of data throws an exception; we need to catch this.

-- when the NOT FOUND condition fires, "done" -- which defaults to FALSE -- will be set to true,

-- and since this is a CONTINUE handler, execution continues with the next statement.

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done1 = TRUE;

-- open the cursor

OPEN cursor_events;

my_loop: -- loops have to have an arbitrary label; it's used to leave the loop

LOOP

-- read the values from the next row that is available in the cursor

FETCH cursor_events INTO eventid;

IF done1 THEN -- this will be true when we are out of rows to read, so we go to the statement after END LOOP.

LEAVE my_loop;

ELSE -- val1 and val2 will be the next values from c1 and c2 in table t1,

-- so now we call the procedure with them for this "row"

BLOCK1 : BEGIN

DECLARE cur2 CURSOR FOR

Select e.eventname,e.eventdate,e.numberOfMats,e.backgroundLogo, s.categoryid,s.categoryname,s.sheettitle,m.matchid,m.bracketmatchid,m.parentid,petitor1,petitor2,m.round,ms.MatchStatus as matcheStatusDisplay,

s.sheetid,s.matnumber,s.starttime,s.duration_category,s.categorytimelimit,s.numberoffights_category

from events e

LEFT JOIN matches m on e.eventid= m.eventid AND m.eventid=eventId

LEFT JOIN matchstatus ms on m.matcheStatus=ms.Id AND m.matcheStatus in (select id from matchstatus where (matcheStatus!='Completed'))

LEFT JOIN sheets s on s.sheetid=m.sheetid AND s.eventid=eventId

where e.eventid=eventId and m.round!=-1 order by matnumber, starttime , categoryid, round, parentid;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done2 = TRUE;

open cur2;

loop2 : LOOP

FETCH cur2 INTO eventname,eventdate,numberOfMats,backgroundLogo, categoryid,categoryname,sheettitle,

matchid,bracketmatchid,parentid,competitor1,competitor2,round,matcheStatusDisplay,

sheetid,matnumber,starttime,duration_category,categorytimelimit,numberoffights_category;

if done2 THEN

CLOSE cur2;

SET done2 = FALSE;

LEAVE loop2;

end if;

select eventId,matchid,eventname,4;

END LOOP loop2;

END BLOCK1;

-- maybe do more stuff here

END IF;

END LOOP;

select 4;

END

创建临时表时出现错误,要求在分号后添加“end”。但这就结束了这一过程。我没有得到什么是正确的语法来实现这一点。我也做过同样的研发。但从所有的参考资料来看,我得到的是同样的语法在起作用。你能告诉我这里少了什么吗?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。