在mysql触发器中声明变量
我有一个MySQL触发器,用于调用rsaencrypt函数来加密特定值在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
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$$