Announcement

Collapse
No announcement yet.

nur ein aktiver DS in Tabelle, welcher trigger?

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

  • nur ein aktiver DS in Tabelle, welcher trigger?

    Hallo Freunde!

    Ich bins wieder mal... heute mit etwas scheinbar trivialem, und zwar:

    Ich hab eine Tabelle mit einem Feld "akitv" tinyint(1). nimmt den wert 0 oder 1 an, also einen booleschen wert. es soll in dieser tabelle aber immer nur einen DS geben, der nen 1 hat -> nur einen aktiven DS. Wollte das ganze über einen trigger machen, der folgend aussieht und geworfen wird, wenn ein anderes jahr aktiv gesetzt werden soll (also geworfen wird er immer, er tut nur etwas wenn ein inaktives jahr aktiv gesetzt wird):
    Code:
    CREATE
    DEFINER=`root`@`localhost`
    TRIGGER `db`.`tbl_jahr_bu_TR`
    BEFORE UPDATE ON `db`.`tbl_jahr`
    FOR EACH ROW
    begin
        if NEW.aktiv = 1 AND OLD.aktiv=0 THEN
            UPDATE tbl_jahr SET aktiv=0 WHERE aktiv=1;
        end if;
    end$$
    problem ist natürlich, dass mir das vom trigger ausgeführte update zum inaktiv setzen des momentan aktiven jahres ebenfalls wieder den trigger aufrufen würde. es würde zwar nichts passieren, aber eine trigger rekursion wird von mySQL nicht zugelassen

    ich denke, dass das sicher schon öfters aufgetaucht ist, nur anscheinend bring ich keine vernünftige google abfrage zusammen um was zu finden
    Also bitte um Unterstützung und Danke für die Hilfe!!! LG

    idsC

  • #2
    Hallo,

    mach sowas nicht über Trigger! Schreib eine SP für das Setzen des aktiven Jahres. Dorthinein schreibst du alle notwendigen Update-Statements. In der Applikation rufst du dann einfach die SP auf.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Kennt mysql funktionsbasierte indices? Falls ja, kann man es so machen:
      Code:
      create table t1(id number check(id=1 or id=0));
      create unique index t1_ix on t1 (decode(id,1,id,null));
      DECODE ist allerdings Oracle spezifisch, dass müsste man durch das mysql Äquivalent ersetzen.

      Mit diesem Konstrukt kannst Du beliebig viele Einträge mit 0 eingeben, aber nur einen mit 1.

      Dim
      Zitat Tom Kyte:
      I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

      Comment


      • #4
        Hallo,
        Originally posted by dimitri View Post
        Kennt mysql funktionsbasierte indices?
        Nein, leider nicht.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X