mysql - 如何格式化这个 MySQL 存储过程?
问题描述
我在格式化这个 MySQL 存储过程时遇到了困难,我已经编写了 SQL Server 存储过程,但是 mysql 不断导致问题。有这方面经验的人可以看看,让我知道我缺少什么格式吗?
CREATE PROCEDURE dbo.spInsertPropertyAndUnit (
IN AccountId INTEGER,
IN Address VARCHAR(255),
IN AddressNumber VARCHAR(255),
IN City VARCHAR(255),
IN State VARCHAR(255),
OUT PropertyId INTEGER
)
BEGIN
DECLARE PropertyId INTEGER;
-- make property
INSERT INTO tblProperties
(Address, AddressNumber, City, State)
VALUES (
IFNULL(Address, ''),
IFNULL(AddressNumber, ''),
IFNULL(City, ''),
IFNULL(State, '')
)
SET PropertyId = CAST(SCOPE_IDENTITY() AS INTEGER)
-- make a default unit
INSERT INTO tblUnits (PropertyId, UnitNumber)
VALUES (PropertyId, 1)
-- Make an Accountpropertymembership
INSERT INTO tblAccountPropertyMemberships (AccountId, PropertyId, MembershipRoleId)
VALUES (AccountId, PropertyId, 0)
SELECT PropertyId FROM tblProperties WHERE PropertyId = @PropertyId
END
解决方案
获取最后一个自增 ID 的函数是LAST_INSERT_ID()
.
您不能使用@PropertyID
来访问名为PropertyID
. 同样,您不能使用@AccountID
来访问AccountID
参数。
您不需要声明变量PropertyID
,因为它已经声明为OUT
参数。
您需要;
在每个语句的末尾。使用该DELIMITER
指令指定备用查询分隔符,以便您可以;
在过程中使用。
最后,您可以简单地使用SELECT PropertyId
来返回变量的值,您不需要查询表本身。
DELIMITER $$
CREATE PROCEDURE dbo.spInsertPropertyAndUnit (
IN AccountId INTEGER,
IN Address VARCHAR(255),
IN AddressNumber VARCHAR(255),
IN City VARCHAR(255),
IN State VARCHAR(255),
OUT PropertyId INTEGER
)
BEGIN
PropertyId INTEGER;
-- make property
INSERT INTO tblProperties
(Address, AddressNumber, City, State)
VALUES (
IFNULL(Address, ''),
IFNULL(AddressNumber, ''),
IFNULL(City, ''),
IFNULL(State, '')
);
SET PropertyId = LAST_INSERT_ID();
-- make a default unit
INSERT INTO tblUnits (PropertyId, UnitNumber)
VALUES (PropertyId, 1);
-- Make an Accountpropertymembership
INSERT INTO tblAccountPropertyMemberships (AccountId, PropertyId, MembershipRoleId)
VALUES (AccountId, PropertyId, 0);
SELECT PropertyId;
END
$$
DELIMITER ;
推荐阅读
- ubuntu-18.04 - Ubuntu 18.04 LTS-如何使用特定版本设置 default-jre?
- azure-data-factory-2 - Azure 数据工厂 V2 中的 Parquet 小数问题
- angular - 如何避免对默认“应该创建”方法的 api 调用
- c# - ASP.Net.Core userManager.CreateAsync
- javascript - 将 @Input() 对象属性分配给组件
- c# - 为什么从 ASP.NET Core Web API 的 ControllerBase 与 Controller 派生?
- python - 赋值前引用的局部变量“sql”
- javascript - 在二维数组中查找最短路径(Javascript)
- video - Adobe After Effects 文件大小
- javascript - 如何在 Chart.js 2.6.0 中增加右间距?