Back to OIM Explorer

dbo.QBM_PProcessGroupCreate

Stored ProcedureSQL_STORED_PROCEDURESandbox DB

Stored Procedure.

Source: sandbox-db sys.sql_modules

Source size: 7.880 characters

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

SQL389 lines
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
SQL · Raw51 lines
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