Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL: INSERT INTO oder UPDATE verknüpft in einem Query

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Zitat von juice122 Beitrag anzeigen
    Ich verstehs grad einfach nicht und googlen hat nichts geholfen.
    Vielleicht solltest Du mal bei Yahoo googlen...

    Also da sind einfach viele kleine Fehler drin, ansonsten sieht es ganz gut aus.

    Code:
    CREATE TABLE table1 (
     id VARCHAR(5),
     attribute VARCHAR(5),
     val VARCHAR(5)
    );
    
    
    Delimiter $$ 
    CREATE PROCEDURE example_proc( )  
    BEGIN 
     Declare nExists INT;
    
     SELECT COUNT(*)
       INTO nExists
       FROM table1
       WHERE val ='5'
         AND attribute='2'
         AND id = '2';
     
     IF nExists THEN 
       UPDATE table1 
          SET val = val + '8' 
        WHERE val ='5' 
          AND attribute='2' 
          AND id = '2';
     
     ELSE 
       INSERT INTO table1
       ( id, attribute, val ) VALUES
       ( '2', '2', '8' );
     END IF;
    END$$
    
    DELIMITER ;
    Läuft bei mir jetzt so durch, habe es aber nicht weiter probiert.

    Hier
    Code:
          SET val = val + '8' 
    noch mal überlegen, ob es eine Addition werden soll oder nicht. Als Datentyp wäre INT besser als VARCHAR, denke ich mal.


    Grüße
    Thomas

    Kommentar


    • #17
      Datentypen sind bei mir alle INT, sorry meine Tabelle im ersten Post is mir da einfach missglückt. Ich bin aber leider immer noch nicht am Ziel.

      Mit exakt deinem Code und einem

      CALL example_proc(); oder CALL db.example_proc(); dahinter kommt einfach nur:

      #1305 - PROCEDURE db.example_proc does not exist.
      Habs auf zwei Servern versucht, beide mit ALL PRIVILEGES als Rechte... ne Idee was da los sein könnte?

      Zitat von nikosch
      Nein. Auch Schlüssel über mehrere Felder sind möglich, auch als PK.
      Könntest du mir das entsprechende Query zeigen. Wenn ich es versuche (siehe 3 Posts weiter oben) komme ich nicht zu dem gewünschten Ergebnis.

      Kommentar


      • #18
        Zitat von juice122 Beitrag anzeigen
        Mit exakt deinem Code und einem

        CALL example_proc(); oder CALL db.example_proc(); dahinter kommt einfach nur:

        #1305 - PROCEDURE db.example_proc does not exist.
        Habs auf zwei Servern versucht, beide mit ALL PRIVILEGES als Rechte... ne Idee was da los sein könnte?
        Es gibt die Prozedur, die du aufrufen möchtest, nicht - also wird wohl bei deren Erstellung was schief gegangen sein. Hast du also diese Stelle mal überprüft ...?
        [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

        Kommentar


        • #19
          Code:
          CREATE TABLE ... PRIMARY KEY(Feld1,Feld2)
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #20
            Zitat von ChrisB Beitrag anzeigen
            Es gibt die Prozedur, die du aufrufen möchtest, nicht - also wird wohl bei deren Erstellung was schief gegangen sein. Hast du also diese Stelle mal überprüft ...?
            Wenn ich nur die Prodezur erstelle erhalte ich folgendes Ergebnis:

            Ihr SQL-Befehl wurde erfolgreich ausgeführt. ( die Abfrage dauerte 0.0032 sek. )

            Zitat von nikosch
            ...
            Hat jetzt komischerweise bei ner komplett neuen Tabelle geklappt. Danke dir.

            Kommentar


            • #21
              Zitat von juice122 Beitrag anzeigen
              Mit exakt deinem Code und einem

              CALL example_proc(); oder CALL db.example_proc(); dahinter kommt einfach nur:
              Bei mir sieht es so aus:

              Code:
              Server version: 5.1.44-community MySQL Community Server (GPL)
              
              Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
              
              mysql> CALL example_proc();
              Query OK, 1 row affected (0.86 sec)
              
              mysql>
              so sieht es bei mir aus, wenn ich die "falsche" Datenbank verwende.
              Code:
              mysql> CALL test22.example_proc();
              ERROR 1305 (42000): PROCEDURE test22.example_proc does not exist
              mysql>
              so kannst Du prüfen, ob die Stored Procedure wirklich (unter der aktuellen Connection und Datenbank) existiert:
              Code:
              mysql> show procedure status like 'ex%';
              +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
              | Db        | Name         | Type      | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
              +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
              | testdb    | example_proc | PROCEDURE | root@localhost | 2010-05-05 22:33:40 | 2010-05-05 22:33:40 | DEFINER       |         | latin1               | latin1_swedish_ci    | latin1_swedish_ci  |
              +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
              1 row in set (0.04 sec)
              
              mysql>
              Ich habe die Procedure als "root"-user erzeugt.

              Grüße
              Thomas

              Kommentar


              • #22
                Bei mir kommt kein Ergebnis - die procedure wird also nicht gespeichert. Ich habe in einigen Threads gelesen, dass das an einer fehlerhaften Installation oder an falschen Tabellenrechten liegt.

                Ich werde dem mal nachgehen, da mich diese prodecures sehr interessieren und ich (dank Dir) einen schnellen Einstieg in die Materie bekommen habe. Das Problem werde ich - denke ich - aber mit ON DUPLICATE KEY UPDATE lösen, da das nun dank niko auch funktioniert.

                Nochmal vielen Dank für die viele Zeit die Du dir genommen hast mir procedures nahe zu bringen .

                Grüße

                Kommentar

                Lädt...
                X