在mysql触发器中声明变量

在mysql触发器中声明变量,mysql,variables,encryption,triggers,Mysql,Variables,Encryption,Triggers,我有一个MySQL触发器,用于调用rsaencrypt函数来加密特定值 DELIMITER $$ CREATE TRIGGER ssninsertencrypt BEFORE INSERT ON redcap_data FOR EACH ROW BEGIN IF new.project_id = (SELECT ProjectID FROM redcap_encryption) AND new.field_name = (SELECT FieldName FROM redcap

我有一个MySQL触发器,用于调用rsaencrypt函数来加密特定值

DELIMITER $$

CREATE TRIGGER ssninsertencrypt BEFORE INSERT ON redcap_data
FOR EACH ROW
BEGIN
    IF new.project_id = (SELECT ProjectID FROM redcap_encryption)
    AND new.field_name = (SELECT FieldName FROM redcap_encryption)
        THEN
            SET @PublicKey = (SELECT PublicKey FROM redcap_encryption WHERE     ProjectID = new.project_id);
            SET new.value = rsaencrypt(new.value,@PublicKey);
    END IF;
END$$

DELIMITER ;
这似乎是不一致的工作/不工作,所以我想将触发器生成的已完成语句插入到另一个表中,以便可以看到什么正在传递给RSANCRYPT或不传递给RSANCRYPT。我想我可以像下面这样做一个SET@SQL()

SET @SQL = 
(IF new.project_id = (SELECT ProjectID FROM redcap_encryption)
AND new.field_name = (SELECT FieldName FROM redcap_encryption)
    THEN
        SET @PublicKey = (SELECT PublicKey FROM redcap_encryption WHERE ProjectID = new.project_id);
        SET new.value = rsaencrypt(new.value,@PublicKey);
END IF;)
我在这方面有语法错误,我不确定如何最好地继续


谢谢

不久前解决了此问题,但忘记发布:-

BEGIN
    IF new.field_name = (SELECT FieldName FROM redcap_encryption WHERE new.project_id = ProjectID)
        THEN
            SET @PublicKey = (SELECT PublicKey FROM redcap_encryption WHERE ProjectID = new.project_id);
            SET new.value = rsaencrypt(new.value,@PublicKey);
    END IF;
END$$