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