Cuba bungkus pernyataan CASE/bersyarat di dalam pencetus MySQL
P粉311089279
P粉311089279 2023-09-11 20:55:31
0
1
973

Saya ada pencetus:

CREATE TRIGGER Moves 
AFTER INSERT ON Rolls
FOR EACH ROW
UPDATE Players
CASE
    WHEN P_Location + NEW.Rolls < 17 THEN
    SET P_Location = P_Location + NEW.Rolls
    WHERE id = NEW.Player_id
    ELSE 
    SET P_Location = NEW.Rolls - (16 - P_Location)
END;

Tetapi sintaks tidak betul di sesetengah tempat dan menghasilkan ralat. Saya telah menyemak soalan serupa di tapak ini, tetapi soalan yang saya lihat nampaknya menggunakan kaedah yang nampaknya tidak berkesan dalam kes ini (khususnya menggunakan IF ). Saya harap syarat utama adalah

IF P_Location + NEW.Rolls < 17 THEN
SET P_Location = P_Location + NEW.Rolls
WHERE id = NEW.Player_id

dan bahagian ELSE ialah

SET P_Location = NEW.Rolls - (16 - P_Location)

Di dalam picu. Bolehkah sesiapa menerangkan bagaimana saya boleh melakukan ini?

P粉311089279
P粉311089279

membalas semua(1)
P粉956441054

Ungkapan CASE mesti dinilai kepada skalar, tetapi anda menyambungkan klausa lain melalui ungkapan CASE.

Anda boleh melakukannya supaya hasil CASE mengembalikan skalar dan menetapkan skalar itu kepada lajur P_Location.

UPDATE Players
SET P_Location = CASE WHEN P_Location + NEW.Rolls < 17
                 THEN P_Location + NEW.Rolls
                 ELSE NEW.Rolls - (16 - P_Location)
                 END
WHERE id = NEW.Player_id;
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan