Eingabeparameter
Parameter | Typ | Beschreibung |
---|---|---|
SRCSNID |
INTEGER |
Primary Key Wert von der SENDUNGEN Tabelle |
SRCSEPOSITION |
INTEGER |
Quell-SEPOSITION |
DESTSNID |
INTEGER |
Primary Key Wert von der SENDUNGEN Tabelle |
DESTSEPOSITION |
INTEGER |
Ziel SEPOSITION |
SRCGROUP |
INTEGER |
Quell-Gruppe |
DESTGROUP |
INTEGER |
Ziel Gruppe |
Ausgabeparameter
Parameter | Typ | Beschreibung |
---|---|---|
NEWDESTSEID |
INTEGER |
Primary Key Wert von der SENDEELEMENTE Tabelle |
NEWDESTSEPOSITION |
INTEGER |
neue Ziel SEPOSITION |
Beschreibung
Damit kann ein Sendeelement oder auch ein Block getauscht werden.
Definition
CREATE PROCEDURE SE_EXCHANGE(
SRCSNID INTEGER,
SRCSEPOSITION INTEGER,
DESTSNID INTEGER,
DESTSEPOSITION INTEGER,
SRCGROUP INTEGER,
DESTGROUP INTEGER)
RETURNS (
NEWDESTSEID INTEGER,
NEWDESTSEPOSITION INTEGER)
AS
DECLARE VARIABLE SrcNewSeId INTEGER;
DECLARE VARIABLE SrcNewSeSnId INTEGER;
DECLARE VARIABLE SrcNewSeDatum DATE;
DECLARE VARIABLE SrcNewSeZeit INTEGER;
DECLARE VARIABLE SrcNewSeSpPosition INTEGER;
DECLARE VARIABLE SrcNewSeSnPosition INTEGER;
DECLARE VARIABLE SrcNewSePosition INTEGER;
DECLARE VARIABLE SrcNextSePosition INTEGER;
DECLARE VARIABLE DestNewSeId INTEGER;
DECLARE VARIABLE DestNewSeSnId INTEGER;
DECLARE VARIABLE DestNewSeDatum DATE;
DECLARE VARIABLE DestNewSeZeit INTEGER;
DECLARE VARIABLE DestNewSeSpPosition INTEGER;
DECLARE VARIABLE DestNewSeSnPosition INTEGER;
DECLARE VARIABLE DestNewSePosition INTEGER;
DECLARE VARIABLE DestNextSePosition INTEGER;
DECLARE VARIABLE GroupChar CHAR(1);
BEGIN
/* Genaue Ziel-Positionen festlegen (Vor/Nach Klammerung) */
EXECUTE PROCEDURE SE_GETBLOCKPOS (DestSnId, DestSePosition, DestGroup)
RETURNING_VALUES (DestNewSeId,
DestNewSeSnId,
DestNewSeDatum,
DestNewSeZeit,
DestNewSeSpPosition,
DestNewSeSnPosition,
DestNewSePosition,
DestNextSePosition);
IF (DESTGROUP = 1) THEN BEGIN
SELECT SEGRUPPE FROM SENDEELEMENTE WHERE SEID = :DestNewSeId
INTO :GroupChar;
EXECUTE PROCEDURE SE_GETGROUPEND(DestSnId, DestSePosition, GroupChar)
RETURNING_VALUES (DestNextSePosition);
END
EXECUTE PROCEDURE SE_GETBLOCKPOS (SrcSnId, SrcSePosition, SrcGroup)
RETURNING_VALUES (SrcNewSeId,
SrcNewSeSnId,
SrcNewSeDatum,
SrcNewSeZeit,
SrcNewSeSpPosition,
SrcNewSeSnPosition,
SrcNewSePosition,
SrcNextSePosition);
IF ((SRCGROUP = 1) AND (SrcNextSePosition = DestNextSePosition)) THEN BEGIN
SELECT SEGRUPPE FROM SENDEELEMENTE WHERE SEID = :SrcNewSeId
INTO :GroupChar;
EXECUTE PROCEDURE SE_GETGROUPEND(SrcSnId, SrcSePosition, GroupChar)
RETURNING_VALUES (SrcNextSePosition);
SrcNextSePosition = SrcNextSePosition + 2;
END
NewDestSeId = DestNewSeId;
NewDestSePosition = DestNewSePosition;
/* Ab aktueller Positon vorwaerts und reuckwaerts Destination-Elemente updaten (verschieben) */
EXECUTE PROCEDURE SE_MOVE_BLOCK (DestSnId,
DestSePosition,
SrcNewSeSnId,
SrcNewSeDatum,
SrcNewSeZeit,
SrcNewSeSpPosition,
SrcNewSeSnPosition,
SrcNextSePosition,
DestGroup,
0)
RETURNING_VALUES (NewDestSeId,
NewDestSePosition);
EXECUTE PROCEDURE SE_MOVE_BLOCK (DestSnId,
DestSePosition,
SrcNewSeSnId,
SrcNewSeDatum,
srcNewSeZeit,
SrcNewSeSpPosition,
SrcNewSeSnPosition,
SrcNextSePosition,
DestGroup,
1)
RETURNING_VALUES (NewDestSeId,
NewDestSePosition);
/* Ab aktueller Positon vorwaerts und reuckeaerts Source-Elemente updaten (verschieben) */
EXECUTE PROCEDURE SE_MOVE_BLOCK (SrcSnId,
SrcSePosition,
DestNewSeSnId,
DestNewSeDatum,
DestNewSeZeit,
DestNewSeSpPosition,
DestNewSeSnPosition,
DestNextSePosition,
SrcGroup,
0)
RETURNING_VALUES (NewDestSeId,
NewDestSePosition);
EXECUTE PROCEDURE SE_MOVE_BLOCK (SrcSnId,
SrcSePosition,
DestNewSeSnId,
DestNewSeDatum,
DestNewSeZeit,
DestNewSeSpPosition,
DestNewSeSnPosition,
DestNextSePosition,
SrcGroup,
1)
RETURNING_VALUES (NewDestSeId,
NewDestSePosition);
/* Positionsnummern der Sendung(en) neu durchnumerieren */
EXECUTE PROCEDURE SE_RENUMPOSITION (DestNewSeSnId);
IF (SrcNewSeSnId <> DestNewSeSnId) THEN BEGIN
EXECUTE PROCEDURE SE_RENUMPOSITION (SrcNewSeSnId);
END
END
![]() ![]() ![]() |