SQL триггеры У меня ошибка при сохранении имени столбца в переменной и использовать его для OLD.myvar в SQL триггеров
MySQL сказал: #1054 - Неизвестный столбец 'TMPCOL' в 'OLD'
BEGIN
DECLARE TOTAL,I INT;
DECLARE CURRENT_CLOUMN VARCHAR(255);
DECLARE TRIGGER_ON_TABLE VARCHAR(255);
DECLARE TRIGGER_OP VARCHAR(255);
DECLARE olddd VARCHAR(255);
DECLARE newwww VARCHAR(255);
SET TOTAL=0;
SET I=0;
SET CURRENT_CLOUMN='atulbaldaniya.com';
SET TRIGGER_ON_TABLE='atulbaldaniya';
SET TRIGGER_OP='UPDATE';
SET olddd='';
SET newwww='';
SELECT COUNT(COLUMN_NAME) INTO TOTAL FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = TRIGGER_ON_TABLE ORDER BY ORDINAL_POSITION;
WHILE I < TOTAL DO
SELECT COLUMN_NAME INTO CURRENT_CLOUMN FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = TRIGGER_ON_TABLE ORDER BY ORDINAL_POSITION LIMIT I,1;
SET olddd=OLD.CURRENT_CLOUMN;
SET newwww=NEW.CURRENT_CLOUMN;
IF(olddd != newwww) THEN
INSERT INTO TMP(DATA1, DATA2)VALUES(TOTAL ,CONCAT('Change in ',olddd,' To ',newwww))
END IF;
SET I=I+1;
END WHILE ;
END
Я не хочу INSERT INTO TMP(DATA1, DATA2)VALUES(TOTAL ,OLD.ID);
это работает нормально.
Я хочу сохранить имя столбца в переменной и использовать как OLD.MYVAR
Как мы можем сделать это?
1 ответ
Вы должны построить свой запрос в виде строки, затем подготовить его и выполнить, что-то похожее на:
SET @s = CONCAT('INSERT INTO TMP(DATA1, DATA2) VALUES ("DATA",OLD.',TMPCOL,');');
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;