【问题标题】:mysql syntax error 1064 "NEW" is not valid at this position for this server version, expecting an identifiermysql 语法错误 1064 “NEW”在此服务器版本的此位置无效,需要标识符
【发布时间】:2020-07-06 12:33:05
【问题描述】:

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

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

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

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 'CALL RETURN_PHYSICIAN(SSN); 附近使用的正确语法;万一; END' 在第 5 行

错误出现在 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');

【问题讨论】:

    标签: mysql mysql-workbench


    【解决方案1】:

    CALL 不是表达式,它不返回值。结果是一个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//
    

    【讨论】:

    • 感谢您的回复!有效。如果我可能会问另一个问题,现在我的最终插入语句返回错误“错误代码:1054。'字段列表'中的未知列'SSN'”。从我收集到的信息来看,它与触发器有关。在新触发器中,我还需要添加什么才能成功完成插入语句吗?抱歉后续问题,我对 SQL 很陌生。
    • 我在最后的插入语句中没有看到 SSN。
    • 患者表行的格式为(SSN、Fam_Phys_SSN、email_address)。不幸的是,我不允许修改最终的插入语句。
    • 您收到的错误来自包含单词SSN 的查询。最后的插入语句不包含那个词,所以错误一定在其他地方。
    • 很可能是来自触发器,调用RETURN_PHYSICIAN()时从哪里获取SSN?
    猜你喜欢
    • 2021-04-12
    • 2020-07-20
    • 2019-04-27
    • 2022-10-07
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多