Наверное просто из человеколюбия, ибо тема обсуждалась с ДЕ
неоднократно, и в аське по горячим следам, и в кабаке под водочку,
прекрасно понимаю, что эту заразу не изловить, не надеюсь, не ропщу, не
плачу. Но только что опять наступил. Текст процедуры привожу полностью,
во избежание сомнений насчёт утаенных деталей.
Create Procedure Fill_Sebg
As
Declare Variable ArcCode Int;
Declare Variable Code Int;
Declare Variable ValPrice Numeric (15,2);
Declare Variable FxCnRate Numeric (15,4);
Declare Variable VaiTonn Numeric (15,3);
Declare Variable PUsrPrice Numeric (15,2);
Declare Variable VUsrPrice Numeric (15,2);
Declare Variable OUsrPrice Numeric (15,2);
Declare Variable CandUc Char (1);
Declare Variable Otkuda Char (1);
Declare Variable Hidden Char (1);
Declare Variable Raw Char (1);
Declare Variable Import Char (1);
Declare Variable UpdCode Int;
Declare Variable ProcCorrCP Numeric (15,2);
Declare Variable DateReg TimeStamp;
Declare Variable NumReg Char (6);
Declare Variable DateIzm TimeStamp;
Declare Variable NumIzm Char (6);
Declare Variable Name VarChar (191);
Declare Variable TPVar Numeric (15,2);
Declare Variable BUTPVar Numeric (15,2);
Declare Variable LVStPrice Numeric (15,2);
Declare Variable SpbTon Numeric (15,3);
Declare Variable BuTon Numeric (15,3);
Declare Variable LVTon Numeric (15,3);
Declare Variable SpbRCnPrice Numeric (15,2);
Declare Variable BURCnPrice Numeric (15,2);
Declare Variable LVCnPrice Numeric (15,2);
Declare Variable SpbCStoim Numeric (15,2);
Declare Variable BUCStoim Numeric (15,2);
Declare Variable LVCStoim Numeric (15,2);
Declare Variable KFxSebSpb Numeric (15,2);
Declare Variable KFxSebBU Numeric (15,2);
Declare Variable KFxSebV Numeric (15,2);
Declare Variable DopSMarga Numeric (15,2);
Declare Variable DopUMarga Numeric (15,2);
Declare Variable DopFMarga Numeric (15,2);
Declare Variable KTTag Int;
Declare Variable TTag Int;
Declare Variable List Int;
Declare Variable Valuta Int;
Begin
For Select Code, Name, List, Valuta, FxCnRate, ValPrice, VaiTonn,
PUsrPrice, VUsrPrice, OUsrPrice, CandUc, Otkuda, UpdCode, Hidden,
Import, Raw, ProcCorrCP, ArcCode, DateReg, DateIzm, NumReg, NumIzm,
/**/ TPVar, BUTPVar, LVStPrice, SpbTon, BuTon, LVTon,
SpbRCnPrice, BURCnPrice, LVCnPrice, SpbCStoim, BUCStoim, LVCStoim,
KFxSebSpb, KFxSebBU, KFxSebV, DopSMarga, DopUMarga, DopFMarga,
KTTag, TTag
From UA_Grupp
Into :Code, :Name, :List, :Valuta, :FxCnRate, :ValPrice, :VaiTonn,
:PUsrPrice, :VUsrPrice, :OUsrPrice, :CandUc, :Otkuda, :UpdCode,
:Hidden,
:Import, :Raw, :ProcCorrCP, :ArcCode, :DateReg, :DateIzm,
:NumReg, :NumIzm,
/**/ :TPVar, :BUTPVar, :LVStPrice, :SpbTon, :BuTon, :LVTon,
:SpbRCnPrice, :BURCnPrice, :LVCnPrice, :SpbCStoim, :BUCStoim,
:LVCStoim,
:KFxSebSpb, :KFxSebBU, :KFxSebV, :DopSMarga, :DopUMarga, :DopFMarga,
:KTTag, :TTag
Do
begin
if (Otkuda Is Null) then Otkuda='Y';
if (KTTag Is Null) then KTTag=0;
if (KTTag Is Null) then KTTag=0;
Insert Into Seb_Grupp
(Code, Name, List, Valuta, FxCnRate, ValPrice, FirmTon,
FirmUsrPrice, LInvPrice, OUsrPrice, CandUc, Otkuda, UpdCode, Hidden,
Import, Raw, ProcCorrCP, ArcCode, DATEREG, TABREG, DATEIZM,
TABIZM, Zaliv)
Values
(:Code, :Name, :List, :Valuta, :FxCnRate, :ValPrice, :VaiTonn,
:PUsrPrice, :VUsrPrice, :OUsrPrice, :CandUc, :Otkuda, :UpdCode,
:Hidden,
:Import, :Raw, :ProcCorrCP, :ArcCode, :DateReg, :NumReg,
:DateIzm, :NumIzm, 'Д');
Insert Into SebG_UslProd
(Code, GArcCode, FOtgr_Usl, TpVar, SklTon, SklVCPrice, SklVCStoim,
KFxSebBaks, FxCnRate, DopMarga, ArcCode, Otkuda, UpdCode, KTag,
TTag, DATEREG, TABREG, DATEIZM, TABIZM, Zaliv)
Values
(:Code, :ArcCode, 1, :TPVar, :SpbTon, :SpbRCnPrice, :SpbCStoim,
:KFxSebSpb, :FxCnRate, :DopSMarga, 0, :Otkuda, :UpdCode, :KTTag,
:TTag, :DateReg, :NumReg, :DateIzm, :NumIzm, 'Д');
Insert Into SebG_UslProd
(Code, GArcCode, FOtgr_Usl, TpVar, SklTon, SklVCPrice, SklVCStoim,
KFxSebBaks, FxCnRate, DopMarga, ArcCode, Otkuda, UpdCode, KTag,
TTag, DATEREG, TABREG, DATEIZM, TABIZM, Zaliv)
Values
(:Code, :ArcCode, 2, :LVStPrice, :LVTon, :LVCnPrice, :LVCStoim,
:KFxSebV, :FxCnRate, :DopFMarga, 0, :Otkuda, :UpdCode, :KTTag,
:TTag, :DateReg, :NumReg, :DateIzm, :NumIzm, 'Д');
Insert Into SebG_UslProd
(Code, GArcCode, FOtgr_Usl, TpVar, SklTon, SklVCPrice, SklVCStoim,
KFxSebBaks, FxCnRate, DopMarga, ArcCode, Otkuda, UpdCode, KTag,
TTag, DATEREG, TABREG, DATEIZM, TABIZM, Zaliv)
Values
(:Code, :ArcCode, 6, :BUTPVar, :BUTon, :BURCnPrice, :BUCStoim,
:KFxSebBU, :FxCnRate, :DopUMarga, 0, :Otkuda, :UpdCode, :KTTag,
:TTag, :DateReg, :NumReg, :DateIzm, :NumIzm, 'Д');
end
End
Таблица SebG_UslProd имеет FK на Seb_Grupp, Code - Code. Процедура
создаётся, коммитится, запускается и сразу же выдаёт violation этого FK.
Чего, на мой выпуклый военно-морской взгляд, не может быть потому что не
может быть никогда. Disconnect, connect, execute - вуаля, отрабатывает с
песнями. Наступаю на это четвёртый раз за всю историю человечества,
всегда на 1.5.x, х - любое. Можно процедуру дропнуть, создать по новой,
запустить - отработает с первого раза. Можно взять копию этой базы,
создать и запустить там - с первого. Можно это сделать 5 раз, 10 - всё
путём. Получается что иногда, при неизвестной фазе луны, тело
свежесозданной, закоммиченной процедуры отрабатывает не целиком. Все
проблемные процедуры были такого же типа - инсерт мастера и затем
деталей, и инсёрт мастера типа не случался. Может это не имеет значения
и процедуры другого типа просто втихомолку отрабатывали неправильно,
если эта неправильность не приводила к исключению. Такшта, ребяты,
переконнекчивайтесь между DDL и DML от греха. Насчёт DDL при живых
юзерах я ваще молчу. Традиционно.
--
Regards. Ded.