我有一个我可以运行的SQL查询,如下所示:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' ', 1), ' ', -1) AS first_name,
If( length(name) - length(replace(name, ' ', ''))>1,
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' ', 2), ' ', -1) ,NULL)
as middle_name,
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' ', 3), ' ', -1) AS last_name
FROM people
虽然将完整name
分为first_name
,middle_name
和last_name
非常有用,但我需要一种自动完成此操作的方法;每次添加person
时,都无法进入并运行查询并手动更新表格。
我尝试以触发器的形式使用此查询,但不断出现错误,通常错误状态为"Not allowed to return a result set from trigger"
任何帮助实现这项工作都会很棒
答案 0 :(得分:0)
在BEFORE INSERT触发器中,使用限定符NEW.
来引用分配给要插入的行的列的值。例如,NEW.col
将引用为col
列提供的值。
将值(或表达式)分配给NEW.col
以替换为列col
提供的值,而是插入分配的值。
完成类似于SELECT语句的触发器看起来像这样:
DELIMITER $$
CREATE TRIGGER mytrigger
BEFORE INSERT ON mytable
FOR EACH ROW
BEGIN
SET NEW.first_name = SUBSTRING_INDEX(SUBSTRING_INDEX( NEW.name, ' ', 1), ' ', -1);
SET NEW.last_name = SUBSTRING_INDEX(SUBSTRING_INDEX( NEW.name, ' ', 3), ' ', -1);
SET NEW.middle_name = IF(LENGTH( NEW.name) - LENGTH(REPLACE( NEW.name, ' ', ''))>1
,SUBSTRING_INDEX(SUBSTRING_INDEX( NEW.name, ' ', 2), ' ', -1)
,NULL);
END$$
DELIMITER ;
您收到的错误:
Error: 1415 SQLSTATE: 0A000 (ER_SP_NO_RETSET)
Message: Not allowed to return a result set from a %s
由于文档限制适用于FUNCTION
和TRIGGER
。 (此限制也适用于从FUNCTION或TRIGGER的上下文中调用的PROCEDURE
。)