Mysql 由于连接|使用触发器和存储过程执行更新命令,工作台崩溃
我是SQL触发器和存储过程的初学者Mysql 由于连接|使用触发器和存储过程执行更新命令,工作台崩溃,mysql,stored-procedures,database-trigger,amazon-aurora,Mysql,Stored Procedures,Database Trigger,Amazon Aurora,我是SQL触发器和存储过程的初学者 我已经编写了一个更新触发器和一个存储过程。 我有两张桌子。 第一个(联系人表)包含联系人,其中包含电子邮件、电话等,另一个表(状态表)包含任务状态和其他信息。每当任务状态更新为可用时,我需要触发lambda函数。 当我运行更新查询时,它会导致工作台崩溃,并出现连接丢失错误。 我只是想交叉检查我的代码是否正确 存储过程 DROP PROCEDURE IF EXISTS call_lambda_for_email; DELIMITER ;; CREATE
我已经编写了一个更新触发器和一个存储过程。 我有两张桌子。 第一个(联系人表)包含联系人,其中包含电子邮件、电话等,另一个表(状态表)包含任务状态和其他信息。每当任务状态更新为可用时,我需要触发lambda函数。
当我运行更新查询时,它会导致工作台崩溃,并出现连接丢失错误。 我只是想交叉检查我的代码是否正确 存储过程
DROP PROCEDURE IF EXISTS call_lambda_for_email;
DELIMITER ;;
CREATE PROCEDURE call_lambda_for_email(IN contact_table_id VARCHAR(255),
IN contact_table_email VARCHAR(255),
IN contact_table_phone VARCHAR(255),
IN status_table_id VARCHAR(255),
IN status_table_task_num VARCHAR(255),
IN status_table_status VARCHAR(255)
) LANGUAGE SQL
BEGIN
CALL mysql.lambda_async(
'arn:aws:lambda:us-east-1:1111111111:function:func_name',
CONCAT('{"status_table_id" : "', status_table_id,
'", "status_table_task_num" : "', status_table_task_num,
'", "status_table_status" : "', status_table_status,
'", "contact_table_id" : "', contact_table_id,
'", "contact_table_email" : "', contact_table_email,
'", "contact_table_phone" : "', contact_table_phone, '"}')
);
END
;;
DELIMITER ;
触发器
DROP TRIGGER IF EXISTS status_table_update_trigger;
DELIMITER ;;
CREATE TRIGGER status_table_update_trigger
AFTER UPDATE ON status_table
FOR EACH ROW
BEGIN
select contact_table.id as contact_id, contact_table.email as contact_email, contact_table.phone as contact_phone,
NEW.id as status_id, NEW.task_num as status_task_num, NEW.status as status
from contact_table
INNER JOIN
status_table
on OLD.id = NEW.contact_id_fk
where NEW.status='Available' INTO @contact_id, @contact_email, @contact_phone, @status_id, @status_task_num, @status;
CALL call_lambda_for_email(@contact_id, @contact_email, @contact_phone, @status_id, @status_task_num, @status);
SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Trigger Fired';
END
;;
DELIMITER ;
我将数据放在两个表中。表#1
插入触点表值(1001,'test@gmail.com', '111-111-111'); 将值(1002,'test@gmail.com', '111-111-111'); 将值(1003,'test@gmail.com', '111-111-111');代码>表格#2<代码>插入状态表格值('Task#11','Task1101','Available',1001);在状态表值中插入('Task_12','Task 2202','Not Available',1002);在状态表中插入值(“任务13”、“任务3303”、“休假”1003)
首先,您应该检查触发器的select函数是否工作并且足够快,然后您应该检查lambda函数的json是否有效。最后,您必须检查lamda函数是否与json一起工作。