sql triggers I have error while storing column name in variable and use it for OLD.myvar in sql triggers

为君一笑 提交于 2020-01-11 13:51:09

问题


MySQL said: #1054 - Unknown column 'TMPCOL' in '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

I dont want to
INSERT INTO TMP(DATA1, DATA2)VALUES(TOTAL ,OLD.ID);
this is working fine.

I want to store column name in a variable and use like OLD.MYVAR

How can we do like this ?


回答1:


You would build your query as a string, then prepare it and execute it, something similar to:

SET @s = CONCAT('INSERT INTO TMP(DATA1, DATA2) VALUES ("DATA",OLD.',TMPCOL,');');

PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;


来源:https://stackoverflow.com/questions/49505921/sql-triggers-i-have-error-while-storing-column-name-in-variable-and-use-it-for-o

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!