mysql - 在 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 行有什么问题?
问候
解决方案
- 您需要将 Delimiter 重新定义为其他内容(例如:)
$$
,而不是 (;
)。 - 同样作为安全措施,检查同名程序是否已经存在(
DROP PROCEDURE IF EXISTS
) - 最后,重新定义
DELIMITER
to;
将存储过程更改为如下:
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 ;
推荐阅读
- django - 基于两个输入的条件验证
- java - 如果@transactional 在类级别应用,如何拦截@transactional 参数
- javascript - How to declare condition statement in nuxt js
- java - 如何从 Spring Controller 将字节数组作为图像返回,以便浏览器可以显示它?
- javascript - 如何使用 javascript regexp 替换字符串的一部分
- c++ - 用 cuda ubuntu 16/04 构建 c++ opencv 4
- sql - 按月份名称的订单记录
- python - 如何在matplotlib中拉伸文本
- angular - 垫表分页未正确加载
- c++ - 如何构建 Qt + cmake + QGLWidget