Prozeduren Previous topic Chapter index Next topic

SE_DELETE_NEW

 

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

 

     Previous topic Chapter index Next topic