mysql 语法错误 1064 "NEW" 在此位置对于此服务器版本无效,需要标识符

mysql syntax error 1064 "NEW" is not valid at this position for this server version, expecting an identifier

我收到一条与语法相关的错误消息。我搜索了 MySql 文档和这些表格,但似乎找不到任何有用的东西。

我正在尝试调用触发器中的存储过程。如果患者没有家庭医生(因此 Fam_Phys_SSN 为空),则调用程序并为他们分配一名家庭医生。

我正在使用 MySql workbench (MySql 8),我收到错误消息:

错误代码:1064。您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 5

行 'CALL RETURN_PHYSICIAN(SSN); END IF; END' 附近使用的正确语法

错误出现在SET NEW.Fam_Phys_SSN中的"NEW"...

我的代码是:

-- Write your stored procedure after this line
delimiter //
create procedure RETURN_PHYSICIAN(IN paSSN INT(11), OUT phSSN INT(11))
BEGIN

    select person.SSN INTO phSSN
    from person join physician using (SSN)
    where city = (select city from person where SSN = paSSN) 
       AND country = (select country from person where SSN = phSSN);

END//
DELIMITER ;
-- Write your trigger after this line and call the stored procedure in the body of the trigger.
delimiter //
CREATE TRIGGER trig1 BEFORE INSERT ON patient
FOR EACH ROW
BEGIN
    IF Fam_Phys_SSN IS NULL THEN
        SET NEW.Fam_Phys_SSN = CALL RETURN_PHYSICIAN(SSN);
    END IF;
END//
DELIMITER ;
-- Do not modify or delete the following lines. Do not write anything after this line.
insert into patient values('530166255', null, 'Noel.Jackson@a.com');

CALL 不是表达式,也不是 return 值。结果是一个 OUT 参数,因此您需要将列放在参数列表中。

CREATE TRIGGER trig1 BEFORE INSERT ON patient
FOR EACH ROW
BEGIN
    IF NEW.Fam_Phys_SSN IS NULL THEN
        CALL RETURN_PHYSICIAN(NEW.SSN, NEW.Fam_Phys_SSN);
    END IF;
END//