簡體   English   中英

帶有多個語句的SQL過程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM