Prozeduren Previous topic Chapter index Next topic

SE_EXCHANGE

 

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

 

     Previous topic Chapter index Next topic