Eingabeparameter
Parameter | Typ | Beschreibung |
---|---|---|
SRCSNID |
INTEGER |
Ein Primary Key Wert von der SENDUNGEN Tabelle |
SRCSEPOSITION |
INTEGER |
Damit wird das Sendeelement in der Sendestunde über die Position angegeben. |
DELETEGROUP |
INTEGER |
Damit wird angegeben, ob nur ein Element oder eine ganze Gruppe gelöscht werden soll. |
Ausgabeparameter
Parameter | Typ | Beschreibung |
---|---|---|
SNID_TRASH |
INTEGER |
Hier erhält man die Sendungs ID vom Papierkorb zurück. |
Beschreibung
Löscht ein Sendeelement (mit Klammer) oder auch ganze Blöcke.
Wenn es für die Welle ein Papierkorb gibt, dann wird das Sendeelement dorthin verschoben, ansonsten direkt gelöscht.
Im Unterschied zur SE_DELETE Stored Procedure wird hier noch der Papierkorb Primary Key zurückgegeben.
(Ruft SE_DELETE auf)
Definition
CREATE PROCEDURE SE_DELETE_NEW(
SRCSNID INTEGER,
SRCSEPOSITION INTEGER,
DELETEGROUP INTEGER)
RETURNS (
SNID_TRASH INTEGER)
AS
DECLARE VARIABLE MaxSePosition INTEGER;
DECLARE VARIABLE SnIdPapierkorb INTEGER;
DECLARE VARIABLE GroupSePosition INTEGER;
DECLARE VARIABLE SeHeaderBlockId INTEGER;
DECLARE VARIABLE SeGruppe CHAR(1);
BEGIN
MaxSePosition = NULL;
SnIdPapierkorb = NULL;
/* Papierkorb herausfinden. */
/* MAX ist nur dafuer da, wenn es mehrere Papierkoerbe */
/* in der gleichen Welle geben wuerde, */
/* was aber nicht vorgesehen ist */
SELECT MAX(SNID) FROM SENDUNGEN JOIN SENDEPLAENE ON (SNSPID = SPID)
WHERE (SPPAPIERKORB = 1) AND
(SPWELLE = (SELECT SPWELLE FROM SENDUNGEN JOIN SENDEPLAENE ON (SNSPID = SPID)
WHERE (SNID = :SrcSnId)))
INTO :SnIdPapierkorb;
IF ((SnIdPapierkorb IS NOT NULL) AND (SnIdPapierkorb <> SrcSnId)) THEN BEGIN
SELECT MAX(SEPOSITION) FROM SENDEELEMENTE
WHERE (SESNID = :SnIdPapierkorb)
INTO :MaxSePosition;
END
IF (MaxSePosition IS NULL) THEN
MaxSePosition = 0;
IF (MaxSePosition < 2147482647) THEN
MaxSePosition = MaxSePosition + 1000;
/* Um das erste Element aus einer Gruppe zu erhalten. Damit die SeBlockId gesetzt werden kann. */
SeGruppe = '-';
SELECT SEGRUPPE FROM SENDEELEMENTE
WHERE (SESNID = :SrcSnId) AND (SEPOSITION = :SrcSePosition)
INTO :SeGruppe;
EXECUTE PROCEDURE SE_GETGROUPSTART (SrcSnId, SrcSePosition, SeGruppe)
RETURNING_VALUES (GroupSePosition);
/* SePosition sollte eindeutig sein. Im Fall wo dies aber nicht waere, */
/* wird deswegen der Fehler mit MAX verhindert. */
SELECT MAX(SEID) FROM SENDEELEMENTE
WHERE (SESNID = :SrcSnId) AND (SEPOSITION = :GroupSePosition)
INTO :SeHeaderBlockId;
/* Ab aktueller Positon + 1 vorwaerts Elemente loeschen */
EXECUTE PROCEDURE SE_DELETE_BLOCK (SrcSnId,
SrcSePosition,
DeleteGroup,
SnIdPapierkorb,
MaxSePosition,
SeHeaderBlockId,
0)
RETURNING_VALUES (SNID_TRASH);
/* Ab aktueller Positon reuckwaerts Elemente updaten (verschieben) */
EXECUTE PROCEDURE SE_DELETE_BLOCK (SrcSnId,
SrcSePosition,
DeleteGroup,
SnIdPapierkorb,
MaxSePosition,
SeHeaderBlockId,
1)
RETURNING_VALUES (SNID_TRASH);
END
![]() ![]() ![]() |