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