[英]SQL procedure with multiple statements
我的SQL經驗很少,所以這個問題可能有點明顯,但從我讀過的內容來看,我似乎正在使用BEGIN / END。 我正在使用BEGIN / END以便連續執行多個語句。 目標是從表中刪除先前的“贏家”,然后使用新的“贏家”計算並填充表格。 該表應該只有一個記錄; 贏家。 無論語句是如何構造的,我都無法通過第一個有效語句處理任何事情。
create procedure contest.getWinner()
begin
begin
delete from contest.winner
where stars > 0;
end
begin
insert into contest.winner(img, stars, cur_DT)
(SELECT A.img, A.stars, now()
FROM
(
SELECT
I.img,
SUM(I.stars) as stars,
MIN(I.cur_DT) as TieBreaker
FROM
contest.votes as I
GROUP BY I.img
)as A
ORDER BY
A.stars DESC,
A.TieBreaker
limit 1
);
end
end
這應該適用於MsSql服務器
create procedure getWinner
as
begin
delete from contest.winner
where stars > 0;
end
begin
insert into contest.winner(img, stars, cur_DT)
(SELECT A.img, A.stars, GETDATE()
FROM
(
SELECT
I.img,
SUM(I.stars) as stars,
MIN(I.cur_DT) as TieBreaker
FROM
contest.votes as I
GROUP BY I.img
)as A
ORDER BY
A.stars DESC,
A.TieBreaker
limit 1
);
End
如果您的RDBMS是SQL Server,請使用以下語法:
CREATE PROCEDURE <name>
AS
BEGIN
<sql_statement>;
<sql_statement>;
<sql_statement>;
END
您必須在“BEGIN”之前添加“AS”關鍵字。
這應該在mySQL中工作
delimiter //
create procedure contest.getWinner()
begin
delete from contest.winner
where stars > 0;
insert into contest.winner(img, stars, cur_DT)
(SELECT A.img, A.stars, now()
FROM
(
SELECT
I.img,
SUM(I.stars) as stars,
MIN(I.cur_DT) as TieBreaker
FROM
contest.votes as I
GROUP BY I.img
)as A
ORDER BY
A.stars DESC,
A.TieBreaker
limit 1
);
end; //
delimiter ;
問題是在mySQL中, 是分隔符,因此當工作台看到它時,它會嘗試結束該過程。 通過將分隔符更改為其他內容,您可以創建該過程。 之后,您可以恢復原始語句分隔符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.