dbo.QBM_PProcessGroupCreate
Stored ProcedureSQL_STORED_PROCEDURESandbox DB
Interpretation
- Database routine. Review parameters, called procedures, DBQueue inserts, and QBM_PJobCreate helper calls before assuming side effects.
Relations
- No extracted relations.
Typed Edges
- references source dbo.QBM_FCVDatetimeToString source text reference
- references source dbo.QBM_FCVStringToInt source text reference
- references source dbo.QBM_FGIConfigparmValue source text reference
- references source dbo.QBM_FGISessionErrorRethrow source text reference
- references source dbo.QBM_FGITableCountAll source text reference
- references source dbo.QBM_PDialogProcessShrink_fill source text reference
- references source dbo.QBM_PJournal source text reference
- references source dbo.QBM_PProcessGroupCreate_help source text reference
- references source dbo.QBM_PSessionErrorAdd source text reference
Complete Source
1CREATE PROCEDURE QBM_PProcessGroupCreate(2 @MaxRuntime int = 03)4AS5BEGIN6 SET nocount7 ON8 DECLARE @lauf int9 DECLARE @laufInnen int10 DECLARE @gesamtanzahl int11 DECLARE @Limit int12 DECLARE @DebugSwitch int = 013 DECLARE @AnzahlInnerLoopCycles int = 014 DECLARE @BlockSizeWork int15 DECLARE @TableCountAll int = dbo.QBM_FGITableCountAll('dialogprocess')16 DECLARE @MussFertigSein datetime17 DECLARE @Message nvarchar(1024)18 DECLARE @XUser nvarchar(64) = object_name(@@procid)19 DECLARE @Xdate datetime = getutcdate()20 BEGIN TRY21 drop TABLE22 IF EXISTS #DialogProcessMirror23 CREATE TABLE #DialogProcessMirror(24 UID_SingleGuid varchar(38) collate database_default NOT NULL,25 BitProperty BIT DEFAULT 0 NULL,26 IntProperty int DEFAULT 0 NULL,27 XDateUpdated datetime NULL28 ) drop TABLE29 IF EXISTS #sammler_Nachbearbeitung30 CREATE TABLE #sammler_Nachbearbeitung(31 GenProcID varchar(38) collate database_default NULL,32 GenProcIDGroup varchar(38) collate database_default NULL,33 index QBM_YProcessGroupCreate1(GenProcID,34 GenProcIDGroup),35 index QBM_YProcessGroupCreate2(GenProcIDGroup,36 GenProcID)37 )38 SELECT @BlockSizeWork = 100039 IF @DebugSwitch > 040 BEGIN41 print 'Start Vorbereitung ' + convert(nvarchar(64),42 GetUTCDate(),43 12144 )45 END46 IF dbo.QBM_FGIConfigparmValue('Common\ProcessState\ExportPolicy'47) NOT IN('HDB',48'FILE'49) AND @DebugSwitch = 050BEGIN51 IF @DebugSwitch > 052 BEGIN53 print 'ExportPolicy paßt nicht'54 END55 GOTO ende56END57SELECT58 @limit = dbo.QBM_FCVStringToInt(dbo.QBM_FGIConfigparmValue('Common\ProcessState\PackageSizeHDB'),59 1000060 )61IF @limit < 162BEGIN63 RAISERROR('#LDS#Value of config parameter Common\ProcessState\PackageSizeHDB must not be less than 1.|',64 18,65 266)67 WITH nowait68END69SELECT @gesamtanzahl = 070IF @DebugSwitch > 071BEGIN72 print '@limit ' + convert(varchar(64),73 @limit74)75END76IF @BlockSizeWork > @Limit77BEGIN78 SELECT @BlockSizeWork = @Limit79END80EXEC QBM_PDialogProcessShrink_fill @RepairSubstituteOnly = 181IF @DebugSwitch > 082BEGIN83 DECLARE @startFill datetime = getutcdate(84)85END86INSERT INTO #DialogProcessMirror(UID_SingleGuid,87IntProperty,88BitProperty,89XDateUpdated90)91SELECT92 p.GenProcID,93 p.ReadyForDeleteOrExport,94 095 AS96 HasGroup,97 p.XDateUpdated98FROM DialogProcess p99CREATE unique index #DialogProcessMirror_i100 ON #DialogProcessMirror(101 UID_SingleGuid102)103CREATE index #DialogProcessMirror_Xdate104 ON #DialogProcessMirror(105 XDateUpdated106)107IF @DebugSwitch > 0108BEGIN109 print CONCAT('Dauer Befüllung',110 str(datediff(ss,111 @startfill,112 getutcdate()))113) print 'Start MakeGroup ' + convert(nvarchar(64),114GetUTCDate(),115121116)117END118IF @MaxRuntime <= 0119BEGIN120 SELECT121 @MussFertigSein = DATEADD(dd,122 1,123 getutcdate()124 )125END126ELSE127BEGIN128 SELECT129 @MussFertigSein = DATEADD(ss,130 @MaxRuntime * 4 / 5,131 GETUTCDATE()132 )133END134IF @DebugSwitch > 0135BEGIN136 print 'Ende Vorbereitung ' + convert(nvarchar(64),137 GetUTCDate(),138 121139) print '@MussFertigSein ' + dbo.QBM_FCVDatetimeToString(@MussFertigSein140)141END142SELECT @lauf = 1143WHILE @lauf > 0144BEGIN145 IF NOT EXISTS(146 SELECT TOP 1 1147 FROM #DialogProcessMirror p148 WHERE149 p.BitProperty = 0 AND p.IntProperty = 2150) OR @MussFertigSein <= GETUTCDATE(151)152BEGIN153 SELECT @lauf = 0154 IF @DebugSwitch > 0155 BEGIN156 IF @MussFertigSein <= GETUTCDATE(157 )158 BEGIN159 print 'ende wegen Zeitüberschreitung'160 END161 ELSE162 BEGIN163 print 'ende wegen kein Fund mit ReadyForDeleteOrExport = 2 und ohne Gruppe'164 END165END166CONTINUE167END168EXEC QBM_PProcessGroupCreate_help @DebugSwitch,169 @BlockSizeWork,170 @Gesamtanzahl OUTPUT,171 @XUser,172 @Xdate,173 @Limit174IF @gesamtanzahl >= @limit175BEGIN176 SELECT @lauf = 0177 IF @DebugSwitch > 0178 BEGIN179 print CONCAT('ende wegen @gesamtanzahl (',180 str(@gesamtanzahl),181 ') >= @limit (',182 str(@limit),183 ')'184 )185END186END187END188IF @MussFertigSein <= GETUTCDATE(189)190BEGIN191 SELECT192 @Message = '#LDS#Group creation finished, because the maximum runtime {0} was reached (remote query timeout).|' + STR(@MaxRuntime193 ) + '|'194EXEC QBM_PJournal @message,195 @@PROCID,196'W',197'W'198END199IF @DebugSwitch > 0200BEGIN201 print 'Ende MakeGroup ' + convert(nvarchar(64),202 GetUTCDate(),203 121204)205END206UPDATE DialogProcess207SET GenProcIDGroup = NULL,208XDateUpdated = @Xdate,209XUserUpdated = @XUser210FROM DialogProcess p211WHERE212 p.GenProcIDGroup > ' ' AND NOT EXISTS(213SELECT TOP 1 1214FROM #DialogProcessMirror m215WHERE216 m.UID_SingleGuid = p.GenProcID AND m.BitProperty = 1217)218SELECT @laufInnen = @@rowcount219IF @DebugSwitch > 0220BEGIN221 print 'nachbehandelte Sätze ' + str(@laufInnen222) print 'Ende Bereinigung ' + convert(nvarchar(64),223GetUTCDate(),224121225)226END227truncate TABLE #sammler_Nachbearbeitung228INSERT INTO #sammler_Nachbearbeitung(GenProcID,229GenProcIDGroup230)231SELECT232 p.GenProcID,233 p.GenProcIDGroup234FROM DialogProcess p235WHERE236 p.GenProcIDGroup > ' ' AND(EXISTS(237SELECT TOP 1 1238FROM DialogProcessSubstitute s1239JOIN DialogProcess p1240 ON s1.GenProcIDNew = p1.GenProcID241WHERE242 s1.GenProcIDOrigin = p.GenProcID AND p1.GenProcIDGroup IS NULL) OR EXISTS(243SELECT TOP 1 1244FROM DialogProcessSubstitute s1245JOIN DialogProcess p1246 ON s1.GenProcIDOrigin = p1.GenProcID247WHERE248 s1.GenProcIDNew = p.GenProcID AND p1.GenProcIDGroup IS NULL)249)250SELECT @AnzahlInnerLoopCycles = 0251SELECT @laufInnen = 1252WHILE @laufInnen > 0253BEGIN254 SELECT @laufInnen = 0255 INSERT INTO #sammler_Nachbearbeitung(GenProcID,256 GenProcIDGroup257)258SELECT259 a.GenProcID,260 a.GenProcIDGroup261FROM(262SELECT263 x.GenProcID,264 x.GenProcIDGroup265FROM(266SELECT su.GenProcIDOrigin267AS268GenProcID, s.GenProcIDGroup269FROM #sammler_Nachbearbeitung s270JOIN DialogProcessSubstitute su271 ON s.GenProcIDGroup = su.GenProcIDNew) AS x272GROUP BY x.GenProcID,273x.GenProcIDGroup) AS a274LEFT275OUTER276JOIN #sammler_Nachbearbeitung e277 ON e.GenProcID = a.GenProcID278WHERE279 e.GenProcID IS NULL280SELECT @laufInnen += @@rowcount281INSERT INTO #sammler_Nachbearbeitung(GenProcID,282GenProcIDGroup)283SELECT284 a.GenProcID,285 a.GenProcIDGroup286FROM(287SELECT288 x.GenProcID,289 x.GenProcIDGroup290FROM(291SELECT292 su.GenProcIDNew AS GenProcID, s.GenProcIDGroup293FROM #sammler_Nachbearbeitung s294JOIN DialogProcessSubstitute su295 ON s.GenProcIDGroup = su.GenProcIDOrigin) AS x296GROUP BY x.GenProcID,297x.GenProcIDGroup) AS a298LEFT299OUTER300JOIN #sammler_Nachbearbeitung e301 ON e.GenProcID = a.GenProcID302WHERE303 e.GenProcID IS NULL304SELECT @laufInnen += @@rowcount305INSERT INTO #sammler_Nachbearbeitung(GenProcID,306GenProcIDGroup)307SELECT308 a.GenProcID,309 a.GenProcIDGroup310FROM(311SELECT312 x.GenProcID,313 x.GenProcIDGroup314FROM(315SELECT316 su.GenProcIDNew AS GenProcID, s.GenProcIDGroup317FROM #sammler_Nachbearbeitung s318JOIN DialogProcessSubstitute su319 ON s.GenProcID = su.GenProcIDOrigin) AS x320GROUP BY x.GenProcID,321x.GenProcIDGroup) AS a322LEFT323OUTER324JOIN #sammler_Nachbearbeitung e325 ON e.GenProcID = a.GenProcID326WHERE327 e.GenProcID IS NULL328SELECT @laufInnen += @@rowcount329INSERT INTO #sammler_Nachbearbeitung(GenProcID,330GenProcIDGroup)331SELECT332 a.GenProcID,333 a.GenProcIDGroup334FROM(335SELECT336 x.GenProcID,337 x.GenProcIDGroup338FROM(339SELECT340 su.GenProcIDOrigin AS GenProcID, s.GenProcIDGroup341FROM #sammler_Nachbearbeitung s342JOIN DialogProcessSubstitute su343 ON s.GenProcID = su.GenProcIDNew) AS x344GROUP BY x.GenProcID,345x.GenProcIDGroup) AS a346LEFT347OUTER348JOIN #sammler_Nachbearbeitung e349 ON e.GenProcID = a.GenProcID350WHERE351 e.GenProcID IS NULL352SELECT @laufInnen += @@rowcount353SELECT @AnzahlInnerLoopCycles += 1354END355IF @DebugSwitch > 0356BEGIN357 print CONCAT('Anzahl der Läufe für -- Nachbehandlung ... ',358 str(@AnzahlInnerLoopCycles))359END360UPDATE DialogProcess361SET GenProcIDGroup = NULL,362XDateUpdated = @Xdate,363XUserUpdated = @XUser364FROM DialogProcess p365WHERE366 p.GenProcIDGroup > ' ' AND EXISTS(367SELECT TOP 1 1368FROM #sammler_Nachbearbeitung s369WHERE370 s.GenProcID = p.GenProcID)371SELECT @laufInnen = @@rowcount372IF @DebugSwitch > 0373BEGIN374 print 'nochmals nachbehandelte Sätze ' + str(@laufInnen) print 'wirkliches Ende Bereinigung ' + convert(nvarchar(64),375 GetUTCDate(),376 121)377END378END TRY379BEGIN CATCH380 EXEC QBM_PSessionErrorAdd DEFAULT381 DECLARE @Rethrow varchar(1000) = dbo.QBM_FGISessionErrorRethrow()382 RAISERROR(@Rethrow,383 18,384 1)385 WITH NOWAIT386END CATCH387ende:388RETURN389END
Open raw exported source
1 create procedure QBM_PProcessGroupCreate ( @MaxRuntime int = 0 ) as begin set nocount on declare @lauf int declare @laufInnen int declare2 @gesamtanzahl int declare @Limit int declare @DebugSwitch int = 0 declare @AnzahlInnerLoopCycles int = 0 declare @BlockSizeWork int declare @TableCountAll3 int = dbo.QBM_FGITableCountAll('dialogprocess') declare @MussFertigSein datetime declare @Message nvarchar(1024) declare @XUser nvarchar(64) = object_name4(@@procid) declare @Xdate datetime = getutcdate() BEGIN TRY drop table if exists #DialogProcessMirror create table #DialogProcessMirror ( UID_SingleGuid5 varchar(38) collate database_default NOT NULL , BitProperty bit default 0 NULL , IntProperty int default 0 NULL , XDateUpdated datetime null ) drop table6 if exists #sammler_Nachbearbeitung create table #sammler_Nachbearbeitung ( GenProcID varchar(38) collate database_default NULL , GenProcIDGroup varchar7(38) collate database_default NULL , index QBM_YProcessGroupCreate1 (GenProcID, GenProcIDGroup) , index QBM_YProcessGroupCreate2 (GenProcIDGroup, GenProcID8) ) select @BlockSizeWork = 1000 if @DebugSwitch > 0 begin print 'Start Vorbereitung ' + convert(nvarchar(64), GetUTCDate(), 121) end if dbo.QBM_FGIConfigparmValue9('Common\ProcessState\ExportPolicy') not in ( 'HDB', 'FILE' ) and @DebugSwitch = 0 begin if @DebugSwitch > 0 begin print 'ExportPolicy paßt nicht' end10 goto ende end select @limit = dbo.QBM_FCVStringToInt(dbo.QBM_FGIConfigparmValue('Common\ProcessState\PackageSizeHDB'), 10000) if @limit < 1 begin raiserror11 ('#LDS#Value of config parameter Common\ProcessState\PackageSizeHDB must not be less than 1.|', 18, 2 ) with nowait end select @gesamtanzahl = 0 if @DebugSwitch12 > 0 begin print '@limit ' + convert(varchar(64), @limit) end if @BlockSizeWork > @Limit begin select @BlockSizeWork = @Limit end exec QBM_PDialogProcessShrink_fill13 @RepairSubstituteOnly = 1 if @DebugSwitch > 0 begin declare @startFill datetime = getutcdate() end insert into #DialogProcessMirror(UID_SingleGuid, IntProperty14, BitProperty, XDateUpdated) select p.GenProcID, p.ReadyForDeleteOrExport, 0 as HasGroup, p.XDateUpdated from DialogProcess p create unique index #DialogProcessMirror_i15 on #DialogProcessMirror(UID_SingleGuid) create index #DialogProcessMirror_Xdate on #DialogProcessMirror(XDateUpdated) if @DebugSwitch > 0 begin print 16concat( 'Dauer Befüllung', str(datediff(ss, @startfill, getutcdate()))) print 'Start MakeGroup ' + convert(nvarchar(64), GetUTCDate(), 121) end if @MaxRuntime17 <= 0 begin select @MussFertigSein = DATEADD(dd, 1, getutcdate()) end else begin select @MussFertigSein = DATEADD(ss , @MaxRuntime * 4 / 5 , GETUTCDATE18() ) end if @DebugSwitch > 0 begin print 'Ende Vorbereitung ' + convert(nvarchar(64), GetUTCDate(), 121) print '@MussFertigSein ' + dbo.QBM_FCVDatetimeToString19(@MussFertigSein) end select @lauf = 1 while @lauf > 0 begin If not exists(select top 1 1 FROM #DialogProcessMirror p WHERE p.BitProperty = 0 AND p.IntProperty20 = 2 ) or @MussFertigSein <= GETUTCDATE() begin SELECT @lauf = 0 if @DebugSwitch > 0 begin if @MussFertigSein <= GETUTCDATE() begin print 'ende wegen Zeitüberschreitung'21 end else begin print 'ende wegen kein Fund mit ReadyForDeleteOrExport = 2 und ohne Gruppe' end end continue end exec QBM_PProcessGroupCreate_help @DebugSwitch22 , @BlockSizeWork , @Gesamtanzahl output , @XUser , @Xdate , @Limit if @gesamtanzahl >= @limit begin select @lauf = 0 if @DebugSwitch > 0 begin print concat23('ende wegen @gesamtanzahl (',str(@gesamtanzahl),') >= @limit (', str(@limit),')') end end end if @MussFertigSein <= GETUTCDATE() begin select @Message24 = '#LDS#Group creation finished, because the maximum runtime {0} was reached (remote query timeout).|' + STR(@MaxRuntime) + '|' exec QBM_PJournal @message25, @@PROCID, 'W', 'W' end if @DebugSwitch > 0 begin print 'Ende MakeGroup ' + convert(nvarchar(64), GetUTCDate(), 121) end update DialogProcess set GenProcIDGroup26 = null , XDateUpdated = @Xdate , XUserUpdated = @XUser from DialogProcess p where p.GenProcIDGroup > ' ' and not exists (select top 1 1 from #DialogProcessMirror27 m where m.UID_SingleGuid = p.GenProcID and m.BitProperty = 1 ) select @laufInnen = @@rowcount if @DebugSwitch > 0 begin print 'nachbehandelte Sätze ' 28+ str(@laufInnen) print 'Ende Bereinigung ' + convert(nvarchar(64), GetUTCDate(), 121) end truncate table #sammler_Nachbearbeitung insert into #sammler_Nachbearbeitung29 (GenProcID, GenProcIDGroup) select p.GenProcID, p.GenProcIDGroup from DialogProcess p where p.GenProcIDGroup > ' ' and (exists (select top 1 1 from DialogProcessSubstitute30 s1 join DialogProcess p1 on s1.GenProcIDNew = p1.GenProcID where s1.GenProcIDOrigin = p.GenProcID and p1.GenProcIDGroup is null) Or exists (select top31 1 1 from DialogProcessSubstitute s1 join DialogProcess p1 on s1.GenProcIDOrigin = p1.GenProcID where s1.GenProcIDNew = p.GenProcID and p1.GenProcIDGroup32 is null) ) select @AnzahlInnerLoopCycles = 0 select @laufInnen = 1 while @laufInnen > 0 begin select @laufInnen = 0 insert into #sammler_Nachbearbeitung33 (GenProcID, GenProcIDGroup) select a.GenProcID, a.GenProcIDGroup from ( select x.GenProcID, x.GenProcIDGroup from ( select su.GenProcIDOrigin as GenProcID34, s.GenProcIDGroup from #sammler_Nachbearbeitung s join DialogProcessSubstitute su on s.GenProcIDGroup = su.GenProcIDNew ) as x group by x.GenProcID, x.GenProcIDGroup35 )as a left outer join #sammler_Nachbearbeitung e on e.GenProcID = a.GenProcID where e.GenProcID is null select @laufInnen += @@rowcount insert into #sammler_Nachbearbeitung36 (GenProcID, GenProcIDGroup) select a.GenProcID, a.GenProcIDGroup from ( select x.GenProcID, x.GenProcIDGroup from ( select su.GenProcIDNew as GenProcID37, s.GenProcIDGroup from #sammler_Nachbearbeitung s join DialogProcessSubstitute su on s.GenProcIDGroup = su.GenProcIDOrigin ) as x group by x.GenProcID38, x.GenProcIDGroup )as a left outer join #sammler_Nachbearbeitung e on e.GenProcID = a.GenProcID where e.GenProcID is null select @laufInnen += @@rowcount39 insert into #sammler_Nachbearbeitung (GenProcID, GenProcIDGroup) select a.GenProcID, a.GenProcIDGroup from ( select x.GenProcID, x.GenProcIDGroup from40 ( select su.GenProcIDNew as GenProcID, s.GenProcIDGroup from #sammler_Nachbearbeitung s join DialogProcessSubstitute su on s.GenProcID = su.GenProcIDOrigin41 ) as x group by x.GenProcID, x.GenProcIDGroup )as a left outer join #sammler_Nachbearbeitung e on e.GenProcID = a.GenProcID where e.GenProcID is null 42select @laufInnen += @@rowcount insert into #sammler_Nachbearbeitung (GenProcID, GenProcIDGroup) select a.GenProcID, a.GenProcIDGroup from ( select x.GenProcID43, x.GenProcIDGroup from ( select su.GenProcIDOrigin as GenProcID, s.GenProcIDGroup from #sammler_Nachbearbeitung s join DialogProcessSubstitute su on 44s.GenProcID = su.GenProcIDNew ) as x group by x.GenProcID, x.GenProcIDGroup )as a left outer join #sammler_Nachbearbeitung e on e.GenProcID = a.GenProcID45 where e.GenProcID is null select @laufInnen += @@rowcount select @AnzahlInnerLoopCycles += 1 end if @DebugSwitch > 0 begin print concat('Anzahl der Läufe für -- Nachbehandlung ... '46, str(@AnzahlInnerLoopCycles)) end update DialogProcess set GenProcIDGroup = null , XDateUpdated = @Xdate , XUserUpdated = @XUser from DialogProcess p47 where p.GenProcIDGroup > ' ' and exists (select top 1 1 from #sammler_Nachbearbeitung s where s.GenProcID = p.GenProcID ) select @laufInnen = @@rowcount48 if @DebugSwitch > 0 begin print 'nochmals nachbehandelte Sätze ' + str(@laufInnen) print 'wirkliches Ende Bereinigung ' + convert(nvarchar(64), GetUTCDate49(), 121) end END TRY BEGIN CATCH exec QBM_PSessionErrorAdd default declare @Rethrow varchar(1000) = dbo.QBM_FGISessionErrorRethrow() RAISERROR (@Rethrow50, 18, 1) WITH NOWAIT END CATCH ende: return end 51