Eingabeparameter
Parameter | Typ | Beschreibung |
---|---|---|
SNID |
INTEGER |
Primary Key Wert von der SENDUNGEN Tabelle |
SEPOSITION |
INTEGER |
Positionsnummer vom selektierten Sendeelement. |
POSTYPE |
INTEGER |
Gibt die Such-Richtung an: |
Ausgabeparameter
Parameter | Typ | Beschreibung |
---|---|---|
BLOCKSEID |
INTEGER |
Primary Key Wert von der SENDEELEMENTE Tabelle |
BLOCKSESNID |
INTEGER |
Primary Key Wert von der SENDUNGEN Tabelle |
BLOCKSEDATUM |
DATE |
Das Datum von diesem Block. |
BLOCKSEZEIT |
INTEGER |
Die Zeit von diesem Block |
BLOCKSESPPOSITION |
INTEGER |
Die Senungsposition von diesem Block. |
BLOCKSESNPOSITION |
INTEGER |
Die Stunden Position von diesem Block. |
BLOCKSEPOSITION |
INTEGER |
Die Position vom diesem Block. |
NEXTSEPOSITION |
INTEGER |
Gibt die nächste Position zurück. |
Beschreibung
Damit erhält man anhand einer Position Informationen über den Block.
Definition
CREATE PROCEDURE SE_GETBLOCKPOS(
SNID INTEGER,
SEPOSITION INTEGER,
POSTYPE INTEGER)
RETURNS (
BLOCKSEID INTEGER,
BLOCKSESNID INTEGER,
BLOCKSEDATUM DATE,
BLOCKSEZEIT INTEGER,
BLOCKSESPPOSITION INTEGER,
BLOCKSESNPOSITION INTEGER,
BLOCKSEPOSITION INTEGER,
NEXTSEPOSITION INTEGER)
AS
DECLARE VARIABLE LastKlammer CHAR(1);
DECLARE VARIABLE DestSeId INTEGER;
DECLARE VARIABLE DestSeSnId INTEGER;
DECLARE VARIABLE DestSeDatum DATE;
DECLARE VARIABLE DestSeZeit INTEGER;
DECLARE VARIABLE DestSeSpPosition INTEGER;
DECLARE VARIABLE DestSeSnPosition INTEGER;
DECLARE VARIABLE DestSePosition INTEGER;
DECLARE VARIABLE DestSeKlammer CHAR(1);
DECLARE VARIABLE TriggerPos INTEGER;
DECLARE VARIABLE LastSeId INTEGER;
DECLARE VARIABLE DestSeGruppe CHAR(1);
DECLARE VARIABLE LastSeGruppe CHAR(1);
BEGIN
LastSeGruppe = NULL;
/* Erstes Element des Klammer-Blockes bestimmen */
IF (PosType = 1) THEN BEGIN
LastKlammer = 'R';
FOR
SELECT
SEID,SESNID,SEDATUM,SEZEIT,SESPPOSITION,SESNPOSITION,
SEPOSITION,SEKLAMMER,SEGRUPPE
FROM SENDEELEMENTE
WHERE (SESNID = :SnId) AND (SEPOSITION <= :SePosition)
ORDER BY SEPOSITION DESCENDING
INTO
:DestSeId,:DestSeSnId,:DestSeDatum,:DestSeZeit,:DestSeSpPosition,:DestSeSnPosition,
:DestSePosition,:DestSeKlammer,:DestSeGruppe
DO BEGIN /* DABDB-268 */
IF (((LastKlammer <> 'R') AND (DestSeKlammer <> 'V')) OR (DestSeGruppe <> LastSeGruppe)) THEN BEGIN
TriggerPos = NULL;
SELECT MIN(SEPOSITION)
FROM SENDEELEMENTE JOIN TRIGGEREDEVENTS
ON ((TETYP <= 99) AND ((SEID = TETRIGGEREDSEID) OR (SEID = TESEID)))
WHERE ((TESEID = :LastSeId) OR
(TESEID IN (SELECT TESEID FROM TRIGGEREDEVENTS
WHERE (TETRIGGEREDSEID = :LastSeId))))
INTO :TriggerPos;
IF ((TriggerPos IS NULL) OR (DestSePosition < TriggerPos)) THEN BEGIN
NextSePosition = (DestSePosition + BlockSePosition) / 2;
EXIT; /* Exit Loop and Procedure */
END
END
LastSeId = DestSeId;
LastKlammer = DestSeKlammer;
LastSeGruppe = DestSeGruppe;
BlockSeId = DestSeId;
BlockSeSnId = DestSeSnId;
BlockSeDatum = DestSeDatum;
BlockSeZeit = DestSeZeit;
BlockSeSpPosition = DestSeSpPosition;
BlockSeSnPosition = DestSeSnPosition;
BlockSePosition = DestSePosition;
END
NextSePosition = BlockSePosition - 500;
END
/* Letztes Element des Klammer-Blockes bestimmen */
ELSE BEGIN
LastKlammer = 'V';
FOR
SELECT
SEID,SESNID,SEDATUM,SEZEIT,SESPPOSITION,SESNPOSITION,
SEPOSITION,SEKLAMMER,SEGRUPPE
FROM SENDEELEMENTE
WHERE (SESNID = :SnId) AND (SEPOSITION >= :SePosition)
ORDER BY SEPOSITION ASCENDING
INTO
:DestSeId,:DestSeSnId,:DestSeDatum,:DestSeZeit,:DestSeSpPosition,:DestSeSnPosition,
:DestSePosition,:DestSeKlammer,:DestSeGruppe
DO BEGIN /* DABDB-268 */
IF (((LastKlammer <> 'V') AND (DestSeKlammer <> 'R')) OR (DestSeGruppe <> LastSeGruppe)) THEN BEGIN
TriggerPos = NULL;
SELECT MAX(SEPOSITION)
FROM SENDEELEMENTE JOIN TRIGGEREDEVENTS
ON ((TETYP <= 99) AND ((SEID = TETRIGGEREDSEID) OR (SEID = TESEID)))
WHERE ((TESEID = :LastSeId) OR
(TESEID IN (SELECT TESEID FROM TRIGGEREDEVENTS
WHERE (TETRIGGEREDSEID = :LastSeId))))
INTO :TriggerPos;
IF ((TriggerPos IS NULL) OR (DestSePosition > TriggerPos)) THEN BEGIN
NextSePosition = (DestSePosition + BlockSePosition) / 2;
EXIT; /* Exit Loop and Procedure */
END
END
LastSeId = DestSeId;
LastKlammer = DestSeKlammer;
LastSeGruppe = DestSeGruppe;
BlockSeId = DestSeId;
BlockSeSnId = DestSeSnId;
BlockSeDatum = DestSeDatum;
BlockSeZeit = DestSeZeit;
BlockSeSpPosition = DestSeSpPosition;
BlockSeSnPosition = DestSeSnPosition;
BlockSePosition = DestSePosition;
END
NextSePosition = BlockSePosition + 500;
END
END
![]() ![]() ![]() |