как использовать переменную в качестве имени столбца в триггере - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь создать какой-то триггер для своей веб-базы данных, но здесь не работает код для моего триггера. Проблема

BEGIN
DECLARE t INT;
DECLARE b INT;
DECLARE ir INT;
DECLARE tgl INT;
DECLARE kol VARCHAR(3);



SET tgl = "(SELECT RIGHT(booking_checkin, 2) FROM pt_bookings WHERE booking_id = NEW.booking.id)";

SET ir = "(SELECT booked_room_id FROM pt_booked_rooms WHERE booking_id = NEW.booking.id)";

SET b = "(SELECT MID(booking_checkin , 6,2) FROM pt_bookings WHERE booking_id = NEW.booking_id)";

SET t = "SELECT IF((SELECT LEFT(booking_checkin, 4) FROM pt_bookings WHERE booking_id = NEW.booking_id) = 2019 ,'0','1')";

SET kol = "d" + tgl;

UPDATE pt_rooms_availabilities
set kol = kol + (SELECT `booking_nights` FROM `pt_bookings` WHERE booking_id = NEW.booking_id)
WHERE room_id = ir AND y = t AND m= b; 
END

Проблема в том, что var kol не читается как имя столбца. Может быть, кто-нибудь может помочья?

1 Ответ

0 голосов
/ 02 июля 2019

Невозможно сделать это в триггере.В общем, вы можете использовать dynamic sql для использования имен столбцов переменных, см., Например, Динамическое преобразование строки в имя столбца .Однако это недопустимо в хранимых функциях или триггерах .

Вы можете использовать if then else, чтобы иметь различные операторы insert для каждой ситуации, что-то вроде if tgl = 7 then update ... set d7 = d7 + ... elseif tgl = 122 then update ... set d122 = d122 + ....

Однако в большинстве ситуаций вы можете и должны избегать этого при разработке таблицы.

Я не уверен, что именно вы пытаетесь сделать, но вы можете просто добавить столбец tglcode ксохраните это значение в таблице, а затем добавьте where tglcode = tgl к вашему update выражению.Похоже, что вы (или ваш предшественник) сделали это или что-то подобное с переменными b и t, хранящимися в столбцах m и t.

Если это жизнеспособное решение (или правильный дизайн таблицы) для вашей проблемы, трудно сказать, хотя и без дополнительной информации.Но вы определенно не можете использовать переменную kol так, как вы это делали в триггере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...