mysql синтаксическая ошибка 1064 «NEW» недопустимо в этой позиции для этой версии сервера, ожидая идентификатора - PullRequest
0 голосов
/ 26 марта 2020

Я получаю сообщение об ошибке, связанное с синтаксисом. Я искал документацию MySql и эти формы и не могу найти ничего, что работает.

Я пытаюсь вызвать хранимую процедуру в триггере. Если у пациента нет семейного врача (следовательно, Fam_Phys_SSN равен нулю), то вызывается процедура, и ему назначается семейный врач.

Я использую MySql верстак (MySql 8) и получаю сообщение об ошибке:

Код ошибки: 1064. У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'CALL RETURN_PHYSICIAN (SSN); END IF; END 'в строке 5

Ошибка появляется на "NEW" в SET NEW.Fam_Phys_SSN ...

Мой код:

-- 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');

1 Ответ

3 голосов
/ 26 марта 2020

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//
...