Prozeduren Previous topic Chapter index Next topic

SE_STATUS

 

Eingabeparameter

Parameter

Typ

Beschreibung

TYP

INTEGER

Damit kann folgendes angegeben werden:
0: Element
1: Gruppe
2: Sendung

SNID

INTEGER

Primary Key Wert von der SENDUNGEN Tabelle

SEPOSVON

INTEGER

Damit gibt man die Position an. Wird bei TYP 0 und 1 gebraucht.

SESTATUS

INTEGER

Der neue Status:
0 = Frei
1 = Gesperrt
2 = In Bearbeitung
3 = Gesendet
4 = Aktuell
5 = Entplant

SEGRUPPE

CHAR(1)

Wird beim TYP=1 gebraucht. Dann wird dies von der SEPOSVON bis zum Gruppen-Ende gemacht.

 

Ausgabeparameter

Parameter

Typ

Beschreibung

UPDATED

INTEGER

Die Anzahl aktualisierter Sendeelemente.

 

Beschreibung

Damit wird der Status von Sendeelementen (Frei oder Gesperrt) auf den gewünschten Status gesetzt.

 

Definition

CREATE PROCEDURE SE_STATUS(
    TYP INTEGER,
    SNID INTEGER,
    SEPOSVON INTEGER,
    SESTATUS INTEGER,
    SEGRUPPE CHAR(1))
RETURNS (
    UPDATED INTEGER)
AS
  DECLARE VARIABLE mySeStatus          INTEGER;
  DECLARE VARIABLE myUpdateSn          INTEGER;
  DECLARE VARIABLE mySePosBis          INTEGER;
BEGIN
  Updated = 0;

  /* aus Geschwindigskeitsgruenden anderes Statements fuer GANZE Sendung */
  IF (Typ = 2) THEN BEGIN   /* Sendung */

    /* pruefen ob alle Sendeelemente abgenommen werden koennen */
    FOR SELECT SESTATUS FROM SENDEELEMENTE
      WHERE SESNID = :SnId
      INTO :mySeStatus
    DO BEGIN
      IF (mySeStatus = 2) THEN
        Updated = Updated + 1;
    END

    UPDATE SENDEELEMENTE
      SET SESTATUS = :SeStatus
      WHERE (SESNID = :SnId) AND ((SESTATUS = 0) OR (SESTATUS = 1));

  END
  ELSE
  IF (Typ = 1) THEN BEGIN  /* Gruppe */

    /* Position von Ende der Gruppe einlesen */
    EXECUTE PROCEDURE SE_GETGROUPEND(SnId, SePosVon, SeGruppe)
          RETURNING_VALUES (mySePosBis);

    /* pruefen ob alle Sendeelemente abgenommen werden koennen */
    FOR SELECT SESTATUS FROM SENDEELEMENTE
      WHERE (SESNID = :SnId) AND
            (SEPOSITION >= :SePosVon) AND
            (SEPOSITION <= :mySePosBis)
      INTO :mySeStatus
    DO BEGIN
      IF (mySeStatus = 2) THEN
        Updated = Updated + 1;
    END

    /* Sendeelemente abnehmen/freigeben */
    UPDATE SENDEELEMENTE
      SET SESTATUS = :SeStatus
      WHERE (SESNID = :SnId) AND
            (SEPOSITION >= :SePosVon) AND
            (SEPOSITION <= :mySePosBis) AND
            ((SESTATUS = 0) OR (SESTATUS = 1));
  END
  ELSE BEGIN /* Element */

    /* pruefen ob alle Sendeelemente abgenommen werden koennen */
    FOR SELECT SESTATUS FROM SENDEELEMENTE
      WHERE (SESNID = :SnId) AND
            (SEPOSITION = :SePosVon)
      INTO :mySeStatus
    DO BEGIN
      IF (mySeStatus = 2) THEN
        Updated = Updated + 1;
    END

    IF (Updated = 0) THEN
      /* Sendeelemente abnehmen/freigeben */
      UPDATE SENDEELEMENTE
        SET SESTATUS = :SeStatus
        WHERE (SESNID = :SnId) AND
              (SEPOSITION = :SePosVon) AND
              ((SESTATUS = 0) OR (SESTATUS = 1));

  END

  /* evtl. Sendung freigeben/abnehmen */
  IF (Updated = 0) THEN BEGIN

    /* Sendung freigeben */
    IF (SeStatus = 0) THEN BEGIN
      UPDATE SENDUNGEN
        SET SNSTATUS = :SeStatus
        WHERE SNID = :SnId;
    END
     /* Sendnung abnehmen */
    ELSE BEGIN
      myUpdateSn = 0;
      FOR SELECT SESTATUS FROM SENDEELEMENTE
        WHERE SESNID = :SnId
        INTO :mySeStatus
      DO BEGIN
        IF ((mySeStatus = 0) OR (mySeStatus = 2)) THEN
          myUpdateSn = myUpdateSn + 1;
      END
      IF (myUpdateSn = 0) THEN /* alle Stati sind 1 oder 3 ==> SnStatus = 1 */
        UPDATE SENDUNGEN
          SET SNSTATUS = :SeStatus
          WHERE SNID = :SnId;

    END
  END
END

 

     Previous topic Chapter index Next topic