Prozeduren Previous topic Chapter index Next topic

UPDATE_UNTERTITEL

 

Eingabeparameter

Parameter

Typ

Beschreibung

ATIID

INTEGER

Hier übergibt man den Primary Key vom Titel Element.

ATIZUSATZTEXT

BLOB SUB_TYPE 1 SEGMENT SIZE 80

Hier übergibt man das Titel Zusatztext BLOB Feld.

 

Ausgabeparameter

(Es gibt keine Ausgabeparameter)

 

Beschreibung

Aktualisiert die UnterTitel Tabelle anhand des Titel Zusatztext BLOB Feld.

 

Definition

CREATE PROCEDURE UPDATE_UNTERTITEL(
    ATIID INTEGER,
    ATIZUSATZTEXT 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 smallint;
declare variable STRREFID varchar(30);
declare variable ANZAHL integer;
BEGIN
  /* leerer String gibt bei F_STRINGCOUNT null zurueck! */
  TitelList = ' ';
  LineIndex = 1;
  TextPos = '';
  if (ATizusatztext is not null) then
  begin
    Anzahl = f_BlobLineCount(ATizusatztext);
    /* Ueber alle Zeilen iterieren */
    WHILE (LineIndex <= Anzahl) DO
    BEGIN
      /* Zeile lesen */
      LineText = F_BLOBLINE(ATiZusatztext, 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 (UTTIID = :ATIID) AND (UTTIIDUNTER = :ActTiRefId) AND (UTLINEINDEX = :LineIndex)
          INTO :OldPos;
          if (OldPos IS NULL) then
          begin
            /* Referenz einfuegen */
            INSERT INTO UNTERTITEL (UTTIID, UTTIIDUNTER, UTPOSITION, UTLINEINDEX)
                 VALUES (:ATIID, :ActTiRefId, :Pos, :LineIndex);
          end else
          begin
            if (OldPos != Pos) then
            begin
              UPDATE UNTERTITEL SET UTPOSITION = :Pos
              WHERE (UTTIID = :ATIID) 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 UTTIID = :ATIID 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 (UTTIID = :ATIID) AND (UTTIIDUNTER = :REFID) AND (UTLINEINDEX = :LINEINDEX)
                                     AND (UTNUTZUNGSART = 0);
    END
  end
  else
  begin
    DELETE FROM UNTERTITEL WHERE (UTTIID = :ATIID) AND (UTNUTZUNGSART = 0);
  end
END

 

     Previous topic Chapter index Next topic