Проблема создания хранимой процедуры в MySQL - PullRequest
0 голосов
/ 23 сентября 2018

Я написал приведенный ниже скрипт в MySQL для создания хранимой процедуры:

CREATE PROCEDURE `AddBranch`(
IN `inCompanyCode` char(3), 
IN `inBranchCode` varchar(6), 
IN `inBankBranch` varchar(40)
)
BEGIN
    DECLARE branchExists TINYINT DEFAULT 0;
    SELECT Count(*) INTO branchExists FROM branches WHERE CompanyCode = inCompanyCode AND BranchCode = inBranchCode;
    IF branchExists = 0 THEN
        INSERT INTO branches VALUES (inCompanyCode, inBranchCode, inBankBranch);
    ELSE
        UPDATE branches SET Branch = inBankBranch
        WHERE CompanyCode = inCompanyCode AND BranchCode = inBranchCode;
    END IF;
END;

Во время выполнения запроса отображается сообщение об ошибке:

1064- у вас есть ошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с '' в строке 7

Я даже пытался DECLARE branchExists TINYINT(1) DEFAULT 0;, но проблема сохраняется.

Что не так с строкой 7?

С уважением

1 Ответ

0 голосов
/ 23 сентября 2018
  • Вам необходимо переопределить разделитель на что-то другое (например, $$) вместо (;).
  • Также в качестве меры безопасности проверьте, существует ли уже такая же процедура именованияили нет (DROP PROCEDURE IF EXISTS)
  • В конце переопределите DELIMITER на ;

Измените хранимую процедуру следующим образом:

DELIMITER $$
DROP PROCEDURE IF EXISTS `AddBranch`$$

CREATE PROCEDURE `AddBranch`(
IN `inCompanyCode` char(3), 
IN `inBranchCode` varchar(6), 
IN `inBankBranch` varchar(40)
)
BEGIN
    DECLARE branchExists TINYINT DEFAULT 0;
    SELECT Count(*) INTO branchExists FROM branches WHERE CompanyCode = inCompanyCode AND BranchCode = inBranchCode;
    IF branchExists = 0 THEN
        INSERT INTO branches VALUES (inCompanyCode, inBranchCode, inBankBranch);
    ELSE
        UPDATE branches SET Branch = inBankBranch
        WHERE CompanyCode = inCompanyCode AND BranchCode = inBranchCode;
    END IF;
END$$

DELIMITER ;
...