Ergebnis 1 bis 3 von 3

Thema: Testdaten Funktion

  1. #1
    Irvin ist offline Neuer Benutzer
    Registriert seit
    01.03.2011
    Beiträge
    1

    Standard Testdaten Funktion

    Hey, ich habe mich durch alle möglichen Informationsquellen durch gewühlt um mein aktuelles Problem zu Lösen und habe auch bereits eine Funktion erstllt, die dem eigentlich nachkommen sollte, doch leider muss ich irgendwo fehler eingebaut haben und bin wohl leicht Betriebsblind und sehe sie nicht, vielleicht könnt ihr meinen Blick etwas schärfen.

    Also ich benötige eine Funktion die Testdaten in eine entsprechende Tabelle hinein erstellt. Und meine bisheriges Hauptproblem liegt bei den beiden Zeitwerten "timestamp", die immer um eine bestimmten wert erhöht werden soll.
    Also verwende ich einen "loop". Ich setze hier mal die bisher entwickelte Funktion ein, die sich leider bis nicht so erstellen lässt.

    REATE OR REPLACE FUNCTION create_test_data() RETURNS int4 AS $$
    DECLARE
    count INT;
    query TEXT;
    time_query TEXT;
    time_record RECORD;
    time_stamp TIMESTAMP;
    BEGIN count = 1;
    LOOP time_query = 'SELECT NOW()::TIMESTAMP + INTERVAL '' || (RANDOM() * 100000000)::INT::TEXT || ' SECONDS'' AS ts';
    EXECUTE time_query INTO time_record;
    time_stamp = time_record.ts;
    RAISE NOTICE 'timestamp: %', time_stamp;
    query = 'INSERT INTO tblmeterdatenkopie
    (meterid, messintervallbeginn, messintervallende, verbraucht_kwh, erzeugt_kwh)
    VALUES ';
    query = query || '('|| 1 ||', ' || quote_literal(time_stamp) || ',' || quote_literal(time_stamp) || '::TIMESTAMP + INTERVAL ''1 HOUR'', ' || (ROUND(RANDOM() * 1000)/1000)::FLOAT || ', ' || (ROUND(RANDOM() * 1000)/1000)::FLOAT || ')';
    EXECUTE query;
    count = count + 1;
    EXIT WHEN count > 10;
    END LOOP;
    RETURN count;
    END;
    $$
    LANGUAGE 'plpgsql';

    Ich hoffe das vielleicht jemand eine Lösung für mich findet.

  2. #2
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Hmm, du solltest mir doch sowieso den Funktionscode schicken ;-)
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  3. #3
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Irvin Beitrag anzeigen
    Hey, ich habe mich durch alle möglichen Informationsquellen durch gewühlt um mein aktuelles Problem zu Lösen und habe auch bereits eine Funktion erstllt, die dem eigentlich nachkommen sollte, doch leider muss ich irgendwo fehler eingebaut haben und bin wohl leicht Betriebsblind und sehe sie nicht, vielleicht könnt ihr meinen Blick etwas schärfen.

    Also ich benötige eine Funktion die Testdaten in eine entsprechende Tabelle hinein erstellt. Und meine bisheriges Hauptproblem liegt bei den beiden Zeitwerten "timestamp", die immer um eine bestimmten wert erhöht werden soll.
    Also verwende ich einen "loop". Ich setze hier mal die bisher entwickelte Funktion ein, die sich leider bis nicht so erstellen lässt.

    REATE OR REPLACE FUNCTION create_test_data() RETURNS int4 AS $$
    DECLARE
    count INT;
    query TEXT;
    time_query TEXT;
    time_record RECORD;
    time_stamp TIMESTAMP;
    BEGIN count = 1;
    LOOP time_query = 'SELECT NOW()::TIMESTAMP + INTERVAL '' || (RANDOM() * 100000000)::INT::TEXT || ' SECONDS'' AS ts';
    EXECUTE time_query INTO time_record;
    time_stamp = time_record.ts;
    RAISE NOTICE 'timestamp: %', time_stamp;
    query = 'INSERT INTO tblmeterdatenkopie
    (meterid, messintervallbeginn, messintervallende, verbraucht_kwh, erzeugt_kwh)
    VALUES ';
    query = query || '('|| 1 ||', ' || quote_literal(time_stamp) || ',' || quote_literal(time_stamp) || '::TIMESTAMP + INTERVAL ''1 HOUR'', ' || (ROUND(RANDOM() * 1000)/1000)::FLOAT || ', ' || (ROUND(RANDOM() * 1000)/1000)::FLOAT || ')';
    EXECUTE query;
    count = count + 1;
    EXIT WHEN count > 10;
    END LOOP;
    RETURN count;
    END;
    $$
    LANGUAGE 'plpgsql';

    Ich hoffe das vielleicht jemand eine Lösung für mich findet.
    Warum so umständlich, generate_series() existiert...

    select current_timestamp + s * '5 second'::interval from generate_series(1,5) s;

    Mal als Beispiel. Das in eine Tabelle zu speichern überlass ich Dir zur Übung.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum