Eingabeparameter
Parameter | Typ | Beschreibung |
---|---|---|
TYP |
INTEGER |
Damit kann folgendes angegeben werden: |
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: |
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
![]() ![]() ![]() |