Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: update

  1. #1
    rabbit ist offline Neuer Benutzer
    Registriert seit
    11.05.2007
    Ort
    ZM
    Beiträge
    3

    Standard update

    Habe folgende Tabelle als Beispiel:

    Artikel Zeit id

    Artikel1 10:11 2
    Artikel2 11:22 3
    Artikel1 09:10 1
    Artikel3 10:09 2
    Artikel2 08:20 2
    Artikel2 08:00 1
    Artikel3 10:00 1

    Möchte nun die Spalte id nachträglich füllen.
    Finde keine richtige Lösung.
    Wer kann helfen.

    Danke

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

    Standard

    Zitat Zitat von rabbit Beitrag anzeigen
    Habe folgende Tabelle als Beispiel:

    Artikel Zeit id

    Artikel1 10:11 2
    Artikel2 11:22 3
    Artikel1 09:10 1
    Artikel3 10:09 2
    Artikel2 08:20 2
    Artikel2 08:00 1
    Artikel3 10:00 1

    Möchte nun die Spalte id nachträglich füllen.
    Finde keine richtige Lösung.
    Wer kann helfen.

    Danke
    Da steht doch schon was drin, was ist Dein Problem?

    Btw.: hat Deine Tabelle einen PK? Welchen Datentyp hat die Zeit-Spalte? Sieht nicht nach einer wirklichen timestamp-Spalte aus...


    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

  3. #3
    rabbit ist offline Neuer Benutzer
    Registriert seit
    11.05.2007
    Ort
    ZM
    Beiträge
    3

    Standard

    Hallo Andreas,

    die Tabelle habe ich nur etwas verallgemeinert.

    Also jetzt genauer:
    Die Spalte Artikel und Zeit sind der PK.
    Typ von Zeit ist timestamp.
    Spalte id ist leer und muß nachträglich gefüllt werden.
    Soll eine einmalige Aktion sein, später dann mit Insert-Trigger in der Form

    BEGIN
    new.id=(select max(id) from tabelle where artikel = new.artikel group by artikel)+1;
    RETURN new;
    END;

    Geht auch schon, muß eben nur noch die id Werte vor Einsatz des Triggers generieren.

    Holger

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

    Standard

    Zitat Zitat von rabbit Beitrag anzeigen
    Hallo Andreas,

    die Tabelle habe ich nur etwas verallgemeinert.

    Also jetzt genauer:
    Die Spalte Artikel und Zeit sind der PK.
    Typ von Zeit ist timestamp.
    Spalte id ist leer und muß nachträglich gefüllt werden.
    Soll eine einmalige Aktion sein, später dann mit Insert-Trigger in der Form

    BEGIN
    new.id=(select max(id) from tabelle where artikel = new.artikel group by artikel)+1;
    RETURN new;
    END;
    Wozu braucht man das?


    Geht auch schon, muß eben nur noch die id Werte vor Einsatz des Triggers generieren.

    Holger

    Nun denn, ein Einzeiler:

    Code:
    test=# \d rabbit
         Table "public.rabbit"
     Column  |  Type   | Modifiers
    ---------+---------+-----------
     artikel | text    |
     zeit    | text    |
     id      | integer |
    
    test=# select * from rabbit ;
     artikel  | zeit  | id
    ----------+-------+----
     Artikel1 | 10:11 |
     Artikel2 | 11:22 |
     Artikel1 | 09:10 |
     Artikel3 | 10:09 |
     Artikel2 | 08:20 |
     Artikel2 | 08:00 |
     Artikel3 | 10:00 |
    (7 rows)
    
    Time: 0.985 ms
    test=*# create or replace function f_r(OUT _a text, OUT _t text, OUT _i int) returns setof record as $$declare r record;a text; t text;i int;begin i:=0; a:='';t:='';for r in select * from rabbit order by artikel, zeit loop if a!=r.artikel then i:=1; end if;_a:=r.artikel;_t:=r.zeit;_i:=i; i:=i+1; a:=r.artikel; return next; end loop; end; $$language plpgsql;
    CREATE FUNCTION
    Time: 2.930 ms
    test=*# select * from f_r();
    
        _a    |  _t   | _i
    ----------+-------+----
     Artikel1 | 09:10 |  1
     Artikel1 | 10:11 |  2
     Artikel2 | 08:00 |  1
     Artikel2 | 08:20 |  2
     Artikel2 | 11:22 |  3
     Artikel3 | 10:00 |  1
     Artikel3 | 10:09 |  2
    (7 rows)
    
    Time: 3.302 ms
    test=*#
    Damit dann Deine Tabelle zu updaten überlasse 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

  5. #5
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard Faulheit macht Kluch - geht viel einfacher ..

    update mySchema."myTable"
    set myIdColumn = nextval('mySchema."myTable_myIdColumn_seq"'::regclass);

    voila

    ich hab das jetzt mal ein bissel verallgemeinert ..

    das funktioniert auf jeden fall einfach mal so, wenn die Tabelle sowie den Primary-Key (autowert) mit dem PGAdmin erzeugt hast. Dann sollte für diesen Primary-Key eben auch eine entsprechende Sequence existieren .. (diese Sequence sollte sich ueber eben diesen PGAdmin leicht ermitteln lassen -> Table wählen und rechts Reiter "Abhängige" anzeigen)

    Also du kannst dir natürlich so eine Sequence auch selbst basteln - aber ich denke mal das brauchst du nicht - weil schon alles da.

    Gruß
    Steffen

    --- NACHTRACH ---
    wenn du keine Seqence auf deiner id-spalte hast und eine moechtest
    CREATE SEQUENCE mySchema."mySequence"
    INCREMENT 1
    MINVALUE 1
    MAXVALUE 9223372036854775807
    START 1
    CACHE 1;

    ALTER TABLE mySchema."myTable_myIdColumn_seq" OWNER TO <der owner eben - am besten jener von der Tabelle>;
    Geändert von symbiont (25.03.2008 um 18:03 Uhr)

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

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    update mySchema."myTable"
    set myIdColumn = nextval('mySchema."myTable_myIdColumn_seq"'::regclass);

    voila
    Von einer Sequenz war keine Rede.

    ich hab das jetzt mal ein bissel verallgemeinert ..

    das funktioniert auf jeden fall einfach mal so, wenn die Tabelle sowie den Primary-Key (autowert) mit dem PGAdmin erzeugt hast.
    Der PK geht über (artikel,zeit).

    Dann sollte für diesen Primary-Key eben auch eine entsprechende Sequence existieren .. (diese Sequence sollte sich ueber eben diesen PGAdmin leicht ermitteln lassen -> Table wählen und rechts Reiter "Abhängige" anzeigen)
    Wird nicht funktionieren.

    Also du kannst dir natürlich so eine Sequence auch selbst basteln - aber ich denke mal das brauchst du nicht - weil schon alles da.

    Gruß
    Steffen
    Er wird mehrere Sequencen brauchen - für jeden Artikel eine.

    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

  7. #7
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard sicher doch ...

    er will mit max(id) ne id-spalte fuellen - da muessen doch die alarmglocken laeuten .. er redet von einer einmaligen aktion - weil der bisherige key nicht mehr der zukuenftige sein wird .. er will eine id-spalte einfuehren ..

    da braucht er ne sequence .. eine .. fuer die id ..

    ferdsch

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

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    er will mit max(id) ne id-spalte fuellen - da muessen doch die alarmglocken laeuten .. er redet von einer einmaligen aktion - weil der bisherige key nicht mehr der zukuenftige sein wird .. er will eine id-spalte einfuehren ..

    da braucht er ne sequence .. eine .. fuer die id ..

    ferdsch
    Nein, schaue Dir mal die Triggerfuktion *etwas* genauer an, die er zeigte. Und Du wirst sehen, was Du bis jetzt übersehen hast.

    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

  9. #9
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard schau sie lieber nicht so genau an

    denn aus quatsch folgt quatsch .. warum sollte man auf unsinn ruecksicht nehmen? Sein Problem ist abstrakter. Und schreit nach einer einfachen Lösung.

    Keep it simple

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

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    denn aus quatsch folgt quatsch .. warum sollte man auf unsinn ruecksicht nehmen? Sein Problem ist abstrakter. Und schreit nach einer einfachen Lösung.

    Keep it simple
    Ähm. Der Fragesteller will sowas wie eine fortlaufende Zählung nach einer Gruppierung, diese Spalte als id zu bezeichnen ist allerdings irreführend. Das ändert nix daran, daß es ein Stück weit unhöflich ist, sein Problem als Quatsch zu bezeichnen ohne eine Lösung bieten zu können.

    Davon abgesehen, mir ist egal, wie DU Dich hier zum Affen machst. Du bist nicht verpflichtet zu antworten, insbesondere dann, wenn Du nix inhaltliches beitragen kannst. Man kann es Dir allerdings auch nicht verbieten. Ich zumindest nicht.

    Falls Du ein Problem mit meiner Person hast, dann sag mir das per eMail und vergewaltige nicht das Forum.

    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

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Insert, Update Trigger der Update ausführt
    Von Tentoxa im Forum Trigger und Funktionen
    Antworten: 2
    Letzter Beitrag: 21.06.2010, 11:31
  2. [Update] 2009-01-14: Update Forensoftware
    Von Xandrian im Forum Neuigkeiten & Ankündigungen
    Antworten: 4
    Letzter Beitrag: 28.01.2009, 17:13
  3. Aufruf von Update vor einem Update auf gleiche Tabelle
    Von Heisp im Forum Trigger und Funktionen
    Antworten: 3
    Letzter Beitrag: 26.06.2007, 14:21

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