Prozeduren Previous topic Chapter index Next topic

UPDATE_UNTERTITEL_SE

 

Eingabeparameter

Parameter

Typ

Beschreibung

ASEID

INTEGER

Hier übergibt man den Primary Key vom Sendeelement.

ASESTATUS

INTEGER

Hier übergibt man den SeStatus Wert vom Sendeelement.

ASEZUSATZTEXT

BLOB SUB_TYPE 1 SEGMENT SIZE 80

Hier übergibt man das Sendeelement Zusatztext BLOB Feld.

 

Ausgabeparameter

(Es gibt keine Ausgabeparameter)

 

Beschreibung

Aktualisiert die UnterTitel Tabelle anhand des Sendeelement Zusatztext BLOB Feld.

 

Definition

CREATE PROCEDURE UPDATE_UNTERTITEL_SE(
    ASEID INTEGER,
    ASESTATUS INTEGER,
    ASEZUSATZTEXT BLOB SUB_TYPE 1 SEGMENT SIZE 80)
AS
declare variable TITELLIST varchar(8190);
declare variable OLDPOS smallint;
declare variable LINETEXT varchar(8190);
declare variable LINEINDEX smallint;
declare variable TEXTPOS varchar(254);
declare variable STRACTTIREFID varchar(20);
declare variable ACTTIREFID integer;
declare variable REFID integer;
declare variable POS integer;
declare variable STRREFID varchar(30);
declare variable ANZAHL integer;
BEGIN
  /* leerer String gibt bei F_STRINGCOUNT null zurueck! */
  TitelList = ' ';
  LineIndex = 1;
  TextPos = '';                        /*DABDB-214*/
  if ((ASeZusatztext is not null) AND (ASeStatus < 5)) then
  begin
    /* Ueber alle Zeilen iterieren */
    Anzahl = f_BlobLineCount(ASeZusatztext);
    WHILE (LineIndex <= Anzahl) DO
    BEGIN
      /* Zeile lesen */
      LineText = F_BLOBLINE(ASeZusatztext, LineIndex);
      IF ((LineText IS NOT NULL) AND (LineText != '')) THEN
      BEGIN
        /* Referenzierte Titel Id extrahieren */
        StrActTiRefId = f_WordNum(LineText, 1, ';', 0);
        ActTiRefId = CAST(StrActTiRefId AS INTEGER);
        /* Workaround wegen f_WordNum Fehler */
        Pos = f_StrPos(';;;', LineText);
        IF (Pos = 0) THEN BEGIN
          Pos = f_StrPos(';;', LineText);
          IF (Pos = 0) THEN BEGIN
            Pos = 6;
          END ELSE BEGIN
            Pos = 5;
          END
        END ELSE BEGIN
          Pos = 4;
        END
        /* Position extrahieren */
        TextPos = f_WordNum(LineText, Pos, ';', 0);
        if ((TextPos IS NOT NULL) AND (TextPos != '')) THEN
        BEGIN
          Pos = CAST(TextPos AS SMALLINT);
          WHEN ANY DO
           Pos = LineIndex;
        END
        ELSE BEGIN
          Pos = LineIndex;
        END
        /* Versteckte Referenz nicht uebernehmen */
        /* Suchtext muss gleich zur HIDE_FILE_EXT sein! */
        if (F_STRPOS('_del.mus', LineText) > 0) then
        begin
          ActTiRefId = 0;
        end
        IF (ActTiRefId <> 0) THEN
        BEGIN
          OldPos = NULL;
          /* Pruefen, ob die Referenz bereits existiert */
          SELECT UTPOSITION FROM UNTERTITEL
          WHERE (UTSEID = :ASEID) AND (UTTIIDUNTER = :ActTiRefId) AND (UTLINEINDEX= :LineIndex)
          INTO :OldPos;
          if (OldPos IS NULL) then
          begin
            /* Referenz einfuegen */
            INSERT INTO UNTERTITEL (UTSEID, UTTIIDUNTER, UTPOSITION, UTLINEINDEX)
                 VALUES (:ASEID, :ActTiRefId, :Pos, :LineIndex);
          end else
          begin
            if (OldPos != Pos) then
            begin
              UPDATE UNTERTITEL SET UTPOSITION = :Pos
              WHERE (UTSEID = :ASEID) AND (UTTIIDUNTER = :ActTiRefId) AND (UTLINEINDEX= :LineIndex);
            end
          end
          /* Referenz zwischen speichern */
          if (TitelList != ' ') then
            TitelList = TitelList || ',';
          TitelList = TitelList || '"' || StrActTiRefId || ':' || CAST(lineindex AS VARCHAR(2)) || '"';
        END
        /* Wenn es eine Exception gibt, wird dies hier abgefangen */
        WHEN ANY DO
         ActTiRefId = 0;
      END
      LineIndex = LineIndex + 1;
    END
    /* Alle nicht mehr verwendeten Referenzen loeschen */
    FOR SELECT UTTIIDUNTER, UTLINEINDEX FROM UNTERTITEL WHERE UTSEID = :ASEID INTO :REFID, :LINEINDEX DO
    BEGIN
      StrRefId = '"' || CAST(REFID AS VARCHAR(20)) || ':' || CAST(LINEINDEX AS VARCHAR(2)) || '"';
      IF (F_STRINGCOUNT(TitelList, StrRefId) < 1) THEN
        DELETE FROM UNTERTITEL WHERE (UTSEID = :ASEID) AND (UTTIIDUNTER = :REFID) AND (UTLINEINDEX = :LINEINDEX)
                                     AND (UTNUTZUNGSART = 0);
    END
  end
  else
  begin
    DELETE FROM UNTERTITEL WHERE (UTSEID = :ASEID) AND (UTNUTZUNGSART = 0);
  end
END

 

     Previous topic Chapter index Next topic