mysql - 在 MySQL 中创建存储过程时出现问题

标签 mysql stored-procedures mysql-error-1064

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

问候

最佳答案

  • 您需要将 Delimiter 重新定义为其他内容(例如:$$),而不是(;)。
  • 同时作为一项安全措施,检查是否已存在同名过程(如果存在则删除过程)
  • 最后,将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 ;

关于mysql - 在 MySQL 中创建存储过程时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52464642/

相关文章:

mysql-error-1064 - 如何在 Yii 框架中使用 IN/AND 子句?

mysql - 如何使用 MySQL 设置递增变量?

java - 如何从 Java 中的 T-SQL 存储过程获取返回值?

php - 从 MySQL 中提取海量数据

sql-server-2008 - 列出所有带有模式名称的存储过程

mysql存储过程查询建议

MySQL 不同列的表连接

mysql - 在 sql 触发器中使用 else if 时出错

java - 如何在mysql中创建一个包含3列的表?

php - 如何根据单词优先级的相关性对mysql搜索结果进行排序