Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Ergebniss Tabelle von einer Prozedur erstellen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Phlippo1, 3 September 2013.

  1. Phlippo1

    Phlippo1 Benutzer

    Hey Leute,

    zum Problem: über ein Access Formular starte ich eine mysql prozedur.
    nun soll in einer Tabelle id, prozedur_name,ausgeführt_am,ergebniss
    gespeichert werden. so dass man immer sieht wann wer die Prozedur ausgeführt hat.

    ich kenne mich leider nicht so aus. kann mir vielleicht jemand helfen?
    danke.
     
  2. ukulele

    ukulele Datenbank-Guru

    Das Beste wäre sicherlich innerhalb der MySQL Prozedur am Ende Ergebniss und Zeit in die Log Tabelle zu schreiben.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Oder ein Statement-Trigger.
     
  4. Phlippo1

    Phlippo1 Benutzer

    mh, aber wie?
    sorry ich bin da echt nicht so helle in dem Gebiet.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Mal als Kurzdemo in PostgreSQL, MySQL kann ich nicht:

    Code:
    test=# create table foo (id serial, val int);
    NOTICE:  CREATE TABLE will create implicit sequence "foo_id_seq" for serial column "foo.id"
    CREATE TABLE
    Time: 1,655 ms
    test=*# create table foo_log (ts timestamp, wer text) inherits (foo);
    CREATE TABLE
    Time: 24,787 ms
    test=*# create or replace function log_foo() returns trigger as $$begin insert into foo_log(ts, wer, id, val) values (now(), current_user, new.id, new.val); return new; end; $$language plpgsql;
    CREATE FUNCTION
    Time: 0,438 ms
    test=*# create trigger trg_foo after insert on foo for each row execute procedure log_foo();
    CREATE TRIGGER
    Time: 0,314 ms
    test=*#
    test=*#
    test=*# insert into foo (val) values(123);
    INSERT 0 1
    Time: 12,490 ms
    test=*# select * from foo_log ;
     id | val |  ts  |  wer
    ----+-----+----------------------------+------------
      1 | 123 | 2013-09-03 15:55:05.443478 | kretschmer
    (1 row)
    
    Einklich einfach, mußt das halt nur auf MySQL anpassen. Das war übrigens ein Row-Trigger, also der feuert bei jeder neuen Zeile. Falls Du das 'nur' per Statement brauchst wäre das aber auch relativ einfach - Dir steht halt NEW.* nicht zur Verfügung.

    Andreas

    Andreas
     
  6. ukulele

    ukulele Datenbank-Guru

    Du solltest erstmal die Prozedur finden und den Code am besten posten. Außerdem müsste man eine Logtabelle anlegen und was genau ist das "Ergebnis" der Prozedur? Eine Zahl?
     
  7. Phlippo1

    Phlippo1 Benutzer

    ok nochmals als vorgeschichte. in dem accessformular gibt es eine checkbox zur auswahl der projektnummer und ein startbutton. beim klicken auf start wird die projektnummer an die prozedur übergeben und für das jeweilige projekt angewandt.
    nun soll in der log tabelle protokolliert werden, wann welches projekt ausgeführt werden.
    also id automatisch generiert. fkt_name ist eigentlich immer fest. ausgeführt am soll automatisch generiert werden und als ergebniss welches projekt ausgeführt wurde.
    die Logtabelle habe ich schon angelegt.
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Ja, wo ist jetzt das Problem? Du erweiterst Deine Prozedur dahingehend, in die schon angelegte Logtabelle die Projektnummer und den aktuellen Timestamp zu speichern? Id zählt selber hoch. Damit hast doch alles, oder?
     
  9. ukulele

    ukulele Datenbank-Guru

    Aber du bist dir sicher das die Prozedur innerhalb eines MySQL Servers läuft und nicht irgendein VB Script in deiner Access Oberfläche ist oder?
     
  10. Phlippo1

    Phlippo1 Benutzer

    ja

    mein problem ist das ich mich nicht so mit mysql auskenne und nicht wirklich weiß wie ich mit einer neuen prozedur die projektnummer etc bekomme und in die Tabelle shcreibe.
    ist bestimmt sau billig, aber ist halt nicht so mein gebiet...
     
  11. akretschmer

    akretschmer Datenbank-Guru

    Warum 'neue' Prozedur?
    @ukulele schrieb: "Das Beste wäre sicherlich innerhalb der MySQL Prozedur am Ende Ergebniss und Zeit in die Log Tabelle zu schreiben."
    @akretschmer schrieb: "Du erweiterst Deine Prozedur dahingehend, in die..."
     
  12. Phlippo1

    Phlippo1 Benutzer

    ok und dann einfach mit SELECT .....
    und dann INSERT INTO(...)

    oder wie?
     
  13. ukulele

    ukulele Datenbank-Guru

    INSERT INTO wirst du brauchen, ja. SELECT vermutlich nicht. Du musst die Prozedur im SQL Server finden und bearbeiten. Leider nutze ich kein MySQL sondern MS SQL aber mit einem vernünftigen SQL Client sollte man alle Prozeduren sehen und den Code dafür bearbeiten können.
     
  14. Phlippo1

    Phlippo1 Benutzer

    die Prozedur hab ich ja. irgendwie bekomm ich das aber nicht hin.

    INSERTINTO s3_lv_num_log(Fkt_Name,Ergebniss) VALUES(funktion,projekt);

    sollte das nicht so reichen?
     
  15. akretschmer

    akretschmer Datenbank-Guru

    Nein, Du wolltest auch noch den Timestamp haben. Oder ist der als Default now() definiert?

    Ansonsten: mit 'irgendwie bekomm ich das aber nicht hin' kommen wir hier irgendwie nicht weiter.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden