Ergebnis 1 bis 3 von 3

Thema: Sequenz Trigger

  1. #1
    hermesd ist offline Neuer Benutzer
    Registriert seit
    04.10.2006
    Beiträge
    6

    Standard Sequenz Trigger

    Hallo zusammen,

    ich hab folgendes Problem. Ich hab mich an einem Trigger versucht der den PK aus einer Sequenz zieht auch wenn man beim insert den PK mit angibt.
    Folgendes hat auch funktioniert. (After Insert )

    BEGIN
    update hochschule set hochschule_id=nextval('hochschule_id_seq') where hochschule_id=new.hochschule_id;

    if not found then
    RAISE EXCEPTION 'Ein Fehler ist aufgetreten';
    End if;
    RETURN NEW;


    Jetzt meine Frage.
    Funktioniert das auch ohne das ich ein Update in dem Trigger absetzen muss?
    Den dieses Update löst einen anderen Trigger aus der ein Update auf den PK vehindert soll und ich somit gar keinen Wert mehr eintragen kann
    Hab das versucht: new.hochschule_id:=nextval('sequenzname')
    Bin für jeden Tipp dankbar.

    Gruß
    Daniel
    Geändert von hermesd (25.01.2007 um 15:31 Uhr)

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

    Standard

    Zitat Zitat von hermesd Beitrag anzeigen
    Hallo zusammen,

    ich hab folgendes Problem. Ich hab mich an einem Trigger versucht der den PK aus einer Sequenz zieht auch wenn man beim insert den PK mit angibt.
    Hä?
    Wenn Du in einer Table einen PK basierend auf einer Sequence hast, dann sollte man nur und ausschließlich diese Sequence nutzen. Du kannst für den PK im INSERT entweder default oder nextval('sequence') angeben oder auch gleich bei der Spaltenaufzählung für den Insert die PK-Spalte weglassen. Einen extra Trigger brauchst Du da nicht.

    Willst Du nach dem Insert den aktuellen PK wissen, dann verwende currval(). Ab 8.2 kannst Du außerdem noch mit RETURNING arbeiten.


    Code:
    Folgendes hat auch funktioniert. (After Insert )
    
    BEGIN
    update hochschule set hochschule_id=nextval('hochschule_id_seq') where hochschule_id=new.hochschule_id;
    
    if not found then
        RAISE EXCEPTION 'Ein Fehler ist aufgetreten';
    End if;
    RETURN NEW;
    
    Jetzt meine Frage.
    Funktioniert das auch ohne das ich ein Update in dem Trigger absetzen muss?
    Nein.

    Ich versteh aber nun, was Du willst: Du willst ein insert into foo (id, bla) values (1, 'so geht das nicht') dahingehend verbiegen, daß daraus ein insert into foo (id, bla) values (default, 'so is besser') wird. Das könnte man evtl. über eine RULE handeln.

    Hint: do instead


    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
    hermesd ist offline Neuer Benutzer
    Registriert seit
    04.10.2006
    Beiträge
    6

    Standard

    Danke für den Tipp,

    genau das war mein Problem. Bei Oracle funktoniert so eine Zuweisung nämlich. Dachte deshalb bei Postgres evtl auch.
    So..dann schau ich mir mal rules an

    Daniel

Ähnliche Themen

  1. Aktueller Wert der Sequenz
    Von ratio im Forum Allgemeines
    Antworten: 4
    Letzter Beitrag: 17.02.2010, 15:21
  2. Sequenz von Nummern aber partiell unique
    Von SPYder im Forum Trigger und Funktionen
    Antworten: 9
    Letzter Beitrag: 04.05.2009, 12:51
  3. Frage Sequenz letzte ID auslesen
    Von DBGTMaster im Forum Allgemeines
    Antworten: 7
    Letzter Beitrag: 06.09.2008, 21:26
  4. Funktionsaufruf, mit integrierter Sequenz
    Von logo im Forum Trigger und Funktionen
    Antworten: 3
    Letzter Beitrag: 27.06.2006, 09:12
  5. ungültige UTF-8-Sequenz
    Von Desian im Forum Allgemeines
    Antworten: 6
    Letzter Beitrag: 10.02.2006, 08:11

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