簡體   English   中英

如何在Trigger MYSQL中將變量設置為存儲過程的結果?

[英]How to set a variable to the result of a stored procedure inside a Trigger MYSQL?

我在這里有一點問題,我正在為我的數據庫工作觸發,但我不知道如何在觸發器中使用存儲過程,我想將過程的結果保存在變量中然后使用以后在IF比較器上變量,這是我的代碼:


DELIMITER @
CREATE TRIGGER insert_players AFTER INSERT ON players FOR EACH ROW
BEGIN
DECLARE A varchar(50);
set A = CALL consult_sex(player_name); //I WANT SOMETHING LIKE THIS
IF A != FEMALE THEN
INSERT INTO males (id_player, player_fullname, player_celphone)
VALUES (new.id_player, concat(new.player_name, " ", new.player_lastname), new.player_phone);
END IF; 
END;
@

有人可以幫我解決這個疑問嗎? 會很棒,謝謝。

讓你的程序采用OUT參數

CREATE PROCEDURE consult_sex(player_name VARCHAR(20), OUT player_sex VARCHAR(10))

在你的程序中SET值如

SET player_sex = <your query to get sex>

調用您的過程傳遞參數

call consult_sex(player_name, @out_value);
select @out_value;

如果希望存儲例程返回值,則需要存儲函數而不是存儲過程。 使用存儲函數,語句如下:

SET A = consult_sex(player_name);

這是一個虛函數:

CREATE FUNCTION `consult_sex`(player_name VARCHAR(100)) RETURNS VARCHAR(6) CHARSET utf8
BEGIN

    DECLARE v_sex VARCHAR(6);

    -- Randomly generate one of two values, MALE or FEMALE
    SET v_sex = (SELECT CASE FLOOR(1 + RAND() * (3-1)) WHEN 1 THEN 'MALE' ELSE 'FEMALE' END);

    RETURN v_sex;
END

您提供的觸發器代碼有一些語法錯誤。 鑒於表和列名稱是正確的,這將適用於存儲的函數:

DELIMITER @
CREATE TRIGGER insert_players AFTER INSERT ON players FOR EACH ROW
BEGIN
    DECLARE A VARCHAR(50);
    SET A = consult_sex(NEW.player_name); 
    IF A != 'FEMALE' THEN
        INSERT INTO males (id_player, player_fullname, player_celphone)
        VALUES (NEW.id_player, CONCAT(NEW.player_name, ' ', NEW.player_lastname), NEW.player_phone);
    END IF; 
END;
@

請務必仔細檢查player_celphone列的拼寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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