Я что-то слишком назойлив стал :)
Но это вроде последнее, что останавливает от перехода на Firebird.
Есть таблица "sector", в неё посредством хранимой процедуры
вставляется или изменяется запись.
Итак, хранимая процедура в MySQL, как она есть:
CREATE DEFINER=`root`@`localhost` PROCEDURE `addOrChangeRecord`(
v BIGINT,
_id BIGINT,
segmentId INT,
socialId VARCHAR(25),
fullName VARCHAR(50),
photoUrl TINYTEXT,
registrationTime DATETIME,
_level INT,
sectorName VARCHAR(50),
x INT,
y INT,
caravanSpeed DOUBLE,
occupantUserId BIGINT,
sectorSkinTypeId BIGINT)
BEGIN
IF EXISTS (select 1 from `WarRules`.`sector` where id = _id)
THEN UPDATE `WarRules`.`sector` SET
`v` = v,
`id` = _id,
`segmentId` = segmentId,
`socialId` = socialId,
`fullName` = fullName,
`photoUrl` = photoUrl,
`registrationTime` = registrationTime,
`level` = _level,
`sectorName` = sectorName,
`x` = x,
`y` = y,
`caravanSpeed` = caravanSpeed,
`occupantUserId` = occupantUserId,
`sectorSkinTypeId` = sectorSkinTypeId
WHERE id=_id;
select CONCAT('ID: ', _id , ' FullName: ', fullName , ' Запись
обновлена.');
ELSE INSERT INTO `WarRules`.`sector` (
`v`,
`id`,
`segmentId`,
`socialId`,
`fullName`,
`photoUrl`,
`registrationTime`,
`level`,
`sectorName`,
`x`,
`y`,
`caravanSpeed`,
`occupantUserId`,
`sectorSkinTypeId`
) VALUES (
v,
_id,
segmentId,
socialId,
fullName,
photoUrl,
registrationTime,
_level,
sectorName,
x,
y,
caravanSpeed,
occupantUserId,
sectorSkinTypeId
);
select CONCAT('ID: ', _id , ' FullName: ', fullName , ' Запись
добавлена.');
END IF;
END
IBExpert
create or alter procedure ADDORCHANGERECORD (
"_V" bigint,
"_ID" bigint,
"_SEGMENTID" integer,
"_SOCIALID" varchar(25),
"_FULLNAME" varchar(50),
"_PHOTOURL" blob sub_type 1 segment size 255,
"_REGISTRATIONTIME" timestamp,
"_LEVEL" integer,
"_SECTORNAME" varchar(50),
"_X" integer,
"_Y" integer,
"_CARAVANSPEED" double precision,
"_OCCUPANTUSERID" bigint,
"_SECTORSKINTYPEID" bigint)
as
begin
if (EXISTS(select 1 from sector where id = "_ID"))
THEN
BEGIN
UPDATE sector SET
v = "_V",
id = "_ID",
segmentId = "_SEGMENTID",
socialId = "_SOCIALID",
fullName = "_FULLNAME",
photoUrl = "_PHOTOURL",
registrationTime = "_REGISTRATIONTIME",
level = "_LEVEL",
sectorName = "_SECTORNAME",
x = "_X",
y = "_Y",
caravanSpeed = "_CARAVANSPEED",
occupantUserId = "_OCCUPANTUSERID",
sectorSkinTypeId = "_SECTORSKINTYPEID"
WHERE id="_ID";
select CONCAT('ID: ', "_ID" , ' FullName: ', "_FULLNAME" , ' Запись
обновлена.');
END
ELSE
BEGIN
INSERT INTO sector (
v,
id,
segmentId,
socialId,
fullName,
photoUrl,
registrationTime,
level,
sectorName,
x,
y,
caravanSpeed,
occupantUserId,
sectorSkinTypeId
) VALUES (
"_V",
"_ID",
"_SEGMENTID",
"_SOCIALID",
"_FULLNAME",
"_PHOTOURL",
"_REGISTRATIONTIME",
"_LEVEL",
"_SECTORNAME",
"_X",
"_Y",
"_CARAVANSPEED",
"_OCCUPANTUSERID",
"_SECTORSKINTYPEID"
);
select CONCAT('ID: ', "_ID" , ' FullName: ', "_FULLNAME" , ' Запись
добавлена.');
END
end
Если возле ' Запись обновлена.'); оставить символ ";", то IBExpert
указывает на окончание этой строки. Если точку с запятой убрать, то
указывает на следующий END.
Не пойму, что он от меня тут хочет. Дальше я пока не правил сильно.
Правильно ли я использую переменные, передаваемые в хранимую
процедуру?
"_ID", с кавычками?