Hallo zusammen,
ich möchte eine UDF in DB" realisieren. Diese soll folgendes können:
Eingabeparameter: ein Timestamp, eine Anzahl und eine Berichts-ID
Anhand der Berichts-ID wird aus einer Tabelle das Intervall gelesen, in denen der Bericht generiert wird (derzeit MONTH oder DAY). Die UDF soll eine Tabelle mit "Anzahl" Zeilen liefern, die jeweils einen Timestamp im Abstand des Intervals haben.
Pseudocode:
for (i=0; i<Anzahl; i++) {
timestamp += Interval
}
Mein Versuch der UDF sieht bisher so aus:
Allerdings bekomme ich verschiedene Fehler, dass er Tokens wie "Declare" und so nicht kennt. Bin mit meinem Latein am Ende, da das oben auch aus Beispielen passt.
Ich hoffe, mir kann hier jemand helfen den Fehler zu finden, bzw. vielleicht ne UDF für mich zu bauen.
vielen Dank schon mal im voraus,
Jörg
ich möchte eine UDF in DB" realisieren. Diese soll folgendes können:
Eingabeparameter: ein Timestamp, eine Anzahl und eine Berichts-ID
Anhand der Berichts-ID wird aus einer Tabelle das Intervall gelesen, in denen der Bericht generiert wird (derzeit MONTH oder DAY). Die UDF soll eine Tabelle mit "Anzahl" Zeilen liefern, die jeweils einen Timestamp im Abstand des Intervals haben.
Pseudocode:
for (i=0; i<Anzahl; i++) {
timestamp += Interval
}
Mein Versuch der UDF sieht bisher so aus:
Code:
create function base.calcTimestamps(starttime TIMESTAMP, report_meta INTEGER, numberOfIntervals INTEGER) RETURNS TABLE (interval_time timestamp) DETERMINISTIC LANGUAGE SQL BEGIN ATOMIC DECLARE dich_gibts_schon CONDITION FOR SQLSTATE '42710'; DECLARE CONTINUE HANDLER FOR dich_gibts_schon DELETE FROM SESSION.TIMETEMP; declare interval CHAR(20); declare counter INTEGER; declare temp_timestamp TIMESTAMP; set temp_timestamp = starttime; set counter = 0; FOR t AS SELECT DISTINCT interval_type FROM BASE.PERIOD_REPORT WHERE report_meta_id = report_meta DO set interval = t.interval_type; END FOR DECLARE GLOBAL TEMPORARY TABLE SESSION.TIMETEMP ( interval_time timestamp ); WHILE counter < numberOfIntervals DO IF interval = 'MONTH' THEN INSERT INTO SESSION.TIMETEMP (interval_time) VALUES (temp_timestamp); set temp_timestamp = temp_timestamp + 1 MONTH; set counter = counter + 1; ELSEIF interval = 'DAY' THEN INSERT INTO SESSION.TIMETEMP (interval_time) VALUES (temp_timestamp); set temp_timestamp = temp_timestamp + 1 DAY; set counter = counter + 1; END IF; END WHILE; RETURN SELECT interval_time FROM SESSION.TIMETEMP END@
Ich hoffe, mir kann hier jemand helfen den Fehler zu finden, bzw. vielleicht ne UDF für mich zu bauen.
vielen Dank schon mal im voraus,
Jörg