Я что-то слишком назойлив стал :)
Но это вроде последнее, что останавливает от перехода на 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", с кавычками?

Reply via email to