Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
Я что-то слишком назойлив стал :) Но это вроде последнее, что останавливает от перехода на 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", с кавычками?
RE: Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
Все не правильно Пример: наверное дальше сам сообразишь. CREATE OR ALTER PROCEDURE COPYORDER ( fromcdorder integer, tocdorder integer, flags integer = 0) as declare variable cdthing integer; declare variable cdmsh integer; declare variable comment varchar(255); declare variable price double precision; declare variable nds double precision; declare variable nds_p double precision; declare variable pricesumm double precision; declare variable cdasklist integer; declare variable cellcount integer; declare variable fromcdmainal integer; declare variable tocdmainal integer; declare variable addhand integer; declare variable c integer; declare variable cdmain integer; declare variable oldcode char(6); declare variable tarif_p double precision; declare variable tarif_summ double precision; declare variable fromcdspecver integer; declare variable tocdspecver integer; declare variable cdmain2 integer; declare variable howmany double precision; declare variable numcell varchar(100); declare variable cdmaincell integer; declare variable fromcdspecref integer; declare variable tocdspecref integer; declare variable fromcdspecvercell integer; declare variable tocdspecvercell integer; declare variable options integer; declare variable fromvalue0 varchar(255); declare variable tovalue0 varchar(255); declare variable cdmain1 integer; declare variable cdchk integer; declare variable value1 varchar(255); declare variable value2 varchar(255); declare variable from_annotate blob sub_type 1 segment size 80; declare variable obozncell varchar(100); declare variable dogorder varchar(100); declare variable cdasklistfield integer; declare variable cell integer; declare variable cdspecver integer; declare variable cdspecvernew integer; declare variable cdnmclparam integer; declare variable cdspecref integer; begin select cdThing, cdMsh, HowMany, Comment, Price, NDS, NDS_P, cdMainAL, PriceSumm, cdAskList, CellCount, Options, Annotate from OrderRef where cdOrder = :FromcdOrder into :cdThing, :cdMsh, :HowMany, :Comment, :Price, :NDS, :NDS_P, :FromcdMainAL, :PriceSumm, :cdAskList, :CellCount, :Options, :From_Annotate; delete from OrderTarifList where cdOrder = :TocdOrder; for select cdMain, Tarif_P, Tarif_Summ from OrderTarifList where cdOrder = :FromcdOrder into :cdMain, :Tarif_P, :Tarif_Summ do insert into OrderTarifList (cdOrder, cdMain, Tarif_P, Tarif_Summ) values (:TocdOrder, :cdMain, :Tarif_P, :Tarif_Summ); update OrderRef set cdThing = :cdThing, cdMsh = :cdMsh, HowMany = :HowMany, Comment = :Comment, Price = :Price, NDS = :NDS, NDS_P = :NDS_P, PriceSumm = :PriceSumm, cdAskList = :cdAskList, CellCount = :CellCount, Options = :Options, Annotate = :From_Annotate where cdOrder = :TocdOrder; Delete from AskListMainFields where cdOrder = :TocdOrder; end
Re: Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
"denixx baykin" ... Я что-то слишком назойлив стал :) Но это вроде последнее, что останавливает от перехода на Firebird. Без чтения базовой документации или хотя бы примеров - ничего не получится. SELECT в воздух не делается. Разберись сначала с конструкциями PSQL. -- Хорсун Влад