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
![]() ![]() ![]() |