Как отформатировать эту хранимую процедуру MySQL? - PullRequest
0 голосов
/ 10 мая 2019

У меня проблемы с форматированием хранимой процедуры MySQL, я создал хранимые процедуры mssql, но 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

1 Ответ

1 голос
/ 10 мая 2019

Функция для получения последнего идентификатора автоинкремента равна 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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...