Prozeduren Previous topic Chapter index Next topic

SE_MOVE

 

Eingabeparameter

Parameter

Typ

Beschreibung

SRCSNID

INTEGER

Ein Primary Key Wert von der SENDUNGEN Tabelle

SRCSEPOSITION

INTEGER

Damit wird das zu verschiebende Element über die SePositon festgelegt.

DESTSNID

INTEGER

Ein Primary Key Wert von der SENDUNGEN Tabelle

DESTSEPOSITION

INTEGER

Gibt die Ziel Position an, wohin verschoben werden soll.

MOVEGROUP

INTEGER

Damit wird angegeben, ob nur ein Element oder eine ganze Gruppe verschoben werden soll.

BEFOREDEST

INTEGER

Damit wird angegeben ob vor oder nach der angegebenen DestSePosition hin verschoben werden soll.

 

Ausgabeparameter

Parameter

Typ

Beschreibung

NEWDESTSEID

INTEGER

Primary Key Wert von der SENDEELEMENTE Tabelle

NEWDESTSEPOSITION

INTEGER

Gibt die neue Ziel Position zurück.

 

Beschreibung

Verschiebt ein Sendeelement (mit Klammer) oder auch ganze Blöcke. (Ruft SE_MOVE_BLOCK auf)

 

Definition

CREATE PROCEDURE SE_MOVE(
    SRCSNID INTEGER,
    SRCSEPOSITION INTEGER,
    DESTSNID INTEGER,
    DESTSEPOSITION INTEGER,
    MOVEGROUP INTEGER,
    BEFOREDEST INTEGER)
RETURNS (
    NEWDESTSEID INTEGER,
    NEWDESTSEPOSITION INTEGER)
AS
declare variable NEWSEID integer;
declare variable NEWSESNID integer;
declare variable NEWSEDATUM date;
declare variable NEWSEZEIT integer;
declare variable NEWSESPPOSITION integer;
declare variable NEWSESNPOSITION integer;
declare variable NEWSEPOSITION integer;
declare variable NEXTSEPOSITION integer;
declare variable NUMBEROFSEINDESTSN integer;
BEGIN

  /* Genaue Ziel-Position festlegen (Vor/Nach Klammerung) */
  SELECT
    COUNT (SEID)
    FROM sendeelemente
    WHERE SESNID = :destsnid
    INTO :NUMBEROFSEINDESTSN;

  if (NUMBEROFSEINDESTSN>0) then begin
      EXECUTE PROCEDURE SE_GETBLOCKPOS (DestSnId, DestSePosition, BeforeDest)
              RETURNING_VALUES (NewSeId,
                                NewSeSnId,
                                NewSeDatum,
                                NewSeZeit,
                                NewSeSpPosition,
                                NewSeSnPosition,
                                NewSePosition,
                                NextSePosition);
      NewDestSeId       = NewSeId;
      NewDestSePosition = NewSePosition;
  end else begin
    /* Es gibt noch keine Elemente in der Sendung, Sendungseigenschaften
       muessen anders ermittelt werden */
    NewDestSePosition = DestSePosition;
    NewSeSnId = DestSnId;
    NextSePosition = NewDestSePosition + 500;

    SELECT SPDATUM, SNPOSITION
      FROM SENDUNGEN INNER JOIN SENDEPLAENE ON SNSPID = SPID
      WHERE SNID=:destsnid
      INTO :NewSeDatum, :NewSeSnPosition;

    NewSeZeit = NewSeSnPosition * 36 * 1000;
    NewSeSpPosition = 0;
  end

  /* Ab aktueller Positon + 1 vorwaerts Elemente updaten (verschieben) */
  EXECUTE PROCEDURE SE_MOVE_BLOCK (SrcSnId,
                                   SrcSePosition,
                                   NewSeSnId,
                                   NewSeDatum,
                                   NewSeZeit,
                                   NewSeSpPosition,
                                   NewSeSnPosition,
                                   NextSePosition,
                                   MoveGroup,
                                   0)
          RETURNING_VALUES (NewDestSeId,
                            NewDestSePosition);

  /* Ab aktueller Positon reuckwaerts Elemente updaten (verschieben) */
  EXECUTE PROCEDURE SE_MOVE_BLOCK (SrcSnId,
                                   SrcSePosition,
                                   NewSeSnId,
                                   NewSeDatum,
                                   NewSeZeit,
                                   NewSeSpPosition,
                                   NewSeSnPosition,
                                   NextSePosition,
                                   MoveGroup,
                                   1)
          RETURNING_VALUES (NewDestSeId,
                            NewDestSePosition);

  /* Positionsnummern der Sendung neu durchnumerieren */
  EXECUTE PROCEDURE SE_RENUMPOSITION (NewSeSnId);

END

 

     Previous topic Chapter index Next topic