Announcement

Collapse
No announcement yet.

Table-UDF in DB"

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Table-UDF in DB"

    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:
    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@
    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
Working...
X