Announcement

Collapse
No announcement yet.

Insert doppelt ausführen wenn ...

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

  • Insert doppelt ausführen wenn ...

    Hallo

    Wenn ich folgenden Insert in einer Stored Procedure ausführe:
    Code:
    DELIMITER |
    CREATE DEFINER = `root`@`localhost` PROCEDURE `AddObject` (IN `ObjectName` VARCHAR(50), IN `GroupID` INT, OUT  `ObjectID` BIGINT, IN `LocaleID` CHAR(2))
    LANGUAGE SQL
    SQL SECURITY DEFINER
    BEGIN
      INSERT INTO `object`
                  (`ID`,
                   `group_ID`)
      VALUES      (NULL,
                   GroupID);
      
      SET ObjectID = Last_insert_id();
        
      INSERT INTO `objectList`
                  (`object_ID`,
                   `locale_ID`,
                   `Name`)
      VALUES      (ObjectID,
                   LocaleID,
                   ObjectName);
    END; |
    DELIMITER ;
    Nun möchte ich einige Probleme abfangen:
    1) Es existiert bereits ein Eintrag im Ersten INSERT.
    Code:
    ON DUPLICATE KEY UPDATE ID=ID
    Nun wird ja der Wert aktualisiert, wobei es derselbe ist. Kann ich den INSERT überspringen wenn der Wert schon existiert? Eine IF mit einer Select ist an sich klar, aber gehts einfacher?

    2) Ich möchte den 2. Insert nochmal ausführen, wenn kein Eintrag in der Tabelle "objectList" mit dem Wert "en" bei "locale_ID" und "object_ID" existiert.
    Wiederum eine IF Abfrage mit einer Select ist natürlich ein Weg, aber wie bei 1): Gehts eleganter?

    Vielen Dank!

  • #2
    Ich weiß nicht, ob ich Dich richtig verstanden habe. Es gibt jedenfalls folgende Möglichkeiten in SQL:
    1. Insert getrieben durch ein Select Statement
    INSER INTO TABLE (cols,..)
    SELECT data, ..,. FROM ..

    2. Prüfung einer bestehenden Menge auf Vorhandensein von Werten
    EXISTS bzw NOT EXISTS

    Das Selectstatement in 1. kann natürlich eine leere Menge liefern und das darauf aufbauende INSERT bekommt kein Futter. Zur Regulierung der Datenmenge des SELECT aus 1. kannst Du vielleicht 2. verwenden.
    Gruß, defo

    Comment


    • #3
      Hallo defo

      Ok, danke!

      Habs so gemacht und klappt

      Comment


      • #4
        Hallo,
        Originally posted by unique24 View Post
        1) Es existiert bereits ein Eintrag im Ersten INSERT. ... Kann ich den INSERT überspringen wenn der Wert schon existiert?
        Hier liese sich das IGNORE-Keyword einsetzen:
        Originally posted by http://dev.mysql.com/doc/refman/5.5/en/insert.html
        If you use the IGNORE keyword, errors that occur while executing the INSERT statement are treated as warnings instead. For example, without IGNORE, a row that duplicates an existing UNIQUE index or PRIMARY KEY value in the table causes a duplicate-key error and the statement is aborted. With IGNORE, the row still is not inserted, but no error is issued.
        [highlight=sql]
        insert ignore into <table> ...
        [/highlight]

        Gruß Falk

        P.S.: Formatierung von SQL in Beiträgen
        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


        • #5
          Hallo Falk

          Danke für den Tipp mit IGNORE(!)

          Ebenso danke für den Formatierung Tipp. Habe mich immer gefragt wie ihr den SQL Code einfügt, da im Editor dieser Button nicht existiert.

          Comment

          Working...
          X