首页 > 解决方案 > 在 MySQL 中创建存储过程的问题

问题描述

我在 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 行有什么问题?

问候

标签: mysqlstored-proceduresmysql-error-1064

解决方案


  • 您需要将 Delimiter 重新定义为其他内容(例如:)$$,而不是 ( ;)。
  • 同样作为安全措施,检查同名程序是否已经存在(DROP PROCEDURE IF EXISTS
  • 最后,重新定义DELIMITERto;

将存储过程更改为如下:

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 ;

推荐阅读