Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [gelöst] MySQL Stored Procedure in Blockly aufufen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] MySQL Stored Procedure in Blockly aufufen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Martin Schlender
      Martin Schlender last edited by Martin Schlender

      Moin,
      hab da eine etwas knifflige Frage.
      Und zwar hab ich mir MySQL installiert und würde dort gerne eine Stored Procedure über Blockly aufrufen:
      90a21060-3f53-4280-9a45-0d1dff1c1bbc-image.png

      Einen simplen Select bekomme ich über send to seht gut hin und das Ergebnis läßt sich auch gut auswerten.
      Bei größeren Projekten ist es aber nicht gerade elegant riesige SELECTS im Blockly Script zu verpacken.
      Wenn ich dasselbe mit einer Prozedur versuche bekommt ich immer einen Fehler:
      Beispielsweise das hier:

      CALL iobroker.GetCheapestPriceE10Week(@Preis);
      SELECT @Preis;
      

      Muß dann eventuell der Befehl von query auf procedure umgestellt werden?
      Danke Euch - Gruß
      Martin

      liv-in-sky 1 Reply Last reply Reply Quote 0
      • liv-in-sky
        liv-in-sky @Martin Schlender last edited by

        @martin-schlender

        habe das mal kurz getestet - funktioniert

        schalte mal das debug im block ein bei loglevel - vielleicht siehst du dann mehr

        Image 062.png

        Martin Schlender 3 Replies Last reply Reply Quote 0
        • Martin Schlender
          Martin Schlender @liv-in-sky last edited by

          @liv-in-sky
          OK danke. Schau ich mir an. Der größter Unterschied scheint mir auf den ersten Blick, dass meine Prozedur einen OUT Parameter hat. Evtl. reicht es auch einfach das auf Ergebnis Recordset - also einen SELECT umzustellen.
          Danke ich versuche es mal.
          Gruß
          Martin

          1 Reply Last reply Reply Quote 0
          • Martin Schlender
            Martin Schlender @liv-in-sky last edited by

            @liv-in-sky
            Hey, eben getestet und die Prozedur funktioniert:
            46beca3d-2b92-42f3-9c7e-04217e7e9938-image.png

            Allerdings bekomme ich das Ergebnis nicht. Denn im result steht nur folgendes:
            script.js.SQL.Spritpreise_Dettingen-Prozedur: {'error':null,'result':{'fieldCount':0,'affectedRows':1,'insertId':0,'info':'','serverStatus':16386,'warningStatus':0,'stateChanges':{'systemVariables':{},'schema':'','trackStateChange':null}}}

            Hab dann das hier versucht:
            CALL iobroker.GetCheapestPriceE10Week(@Preis);
            SELECT @Preis;

            und da kommt dann:
            script.js.SQL.Spritpreise_Dettingen-Prozedur: {'error':'Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT @Preis' at line 1'}

            Vermutlich muß ich einfach die Prozedur von Output Parameter auf Recordset umstellen um das zu lösen.
            Gruß
            Martin

            liv-in-sky 1 Reply Last reply Reply Quote 0
            • Martin Schlender
              Martin Schlender @liv-in-sky last edited by

              @liv-in-sky
              wie vermutet klappt es jetzt. Das Ergebnis der Prozedur ist nur leider zweifach verpackt in JSON - aber das ist bei Prozeduraufrufen halt so:
              {'error':null,'result':[[{'Preis':1.769}],{'fieldCount':0,'affectedRows':0,'insertId':0,'info':'','serverStatus':16386,'warningStatus':0,'stateChanges':{'systemVariables':{},'schema':'','trackStateChange':null}}]}

              Läßt sich ja lösen.
              Danke. Falls Du noch dahinter kommst wie man mit Output Variablen arbeitet wäre ich dankbar.
              LG Martin

              liv-in-sky 2 Replies Last reply Reply Quote 0
              • liv-in-sky
                liv-in-sky @Martin Schlender last edited by

                @martin-schlender sagte in MySQL Stored Procedure in Blockly aufufen:

                Danke. Falls Du noch dahinter kommst wie man mit Output Variablen arbeitet wäre ich dankbar.

                @apollon77

                weißt du, wie man die output variable in so einem call bekommt ? wird die vom adapter geliefert ?

                1 Reply Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky @Martin Schlender last edited by

                  @martin-schlender sagte in MySQL Stored Procedure in Blockly aufufen:

                  SELECT @Preis;

                  hast du mal probiert, die datenbank mit anzugeben ?

                  select @Preis from .......
                  
                  1 Reply Last reply Reply Quote 0
                  • liv-in-sky
                    liv-in-sky @Martin Schlender last edited by

                    @martin-schlender wo rufst du eigentlich das select@Preis auf

                    wenn ich es in der procedure mache kommt das:

                    Image 068.png

                    Image 069.png

                    Martin Schlender 1 Reply Last reply Reply Quote 0
                    • Martin Schlender
                      Martin Schlender @liv-in-sky last edited by

                      @liv-in-sky
                      nee - das SELECT @Preis ist natürlich außerhalb der Prozedur im Blockly mit drin.
                      Man ruft die Prozedur auf und wertet danach das Ergebnis der Output Variable aus.

                      Wenn man das in einer MySQL Sitzung macht funktioniert das auch:
                      12b6a089-d409-44b6-a604-37256ac87efe-image.png

                      Das hier funktioniert im übrigen nicht:
                      CALL iobroker.GetCheapestPriceE10Week(@Preis);
                      SELECT iobroker.@Preis;

                      Was jetzt auch kein Wunder ist, da es sich ja um eine Variable handelt die nicht Teil der Datenbank iobroker ist.
                      LG Martin

                      liv-in-sky 1 Reply Last reply Reply Quote 0
                      • liv-in-sky
                        liv-in-sky @Martin Schlender last edited by

                        ganz ehrlich: so richtig check ich das nicht

                        @martin-schlender sagte in [gelöst] MySQL Stored Procedure in Blockly aufufen:

                        natürlich außerhalb der Prozedur

                        ja aber dann wird ein select aufgrufen, der keine "heimat" hat - die procedure wird doch in der datenbank angelegt/definiert

                        der adapter macht eine neue anfrage mit select @Preis - woher soll er wissen, zu welcher db das gehört ? wenn man das in phpadmin macht, ist die db ja definiert, daher funktioniert das

                        oder täusche ich mich da 🙂

                        Martin Schlender 1 Reply Last reply Reply Quote 0
                        • Martin Schlender
                          Martin Schlender @liv-in-sky last edited by

                          @liv-in-sky
                          In MySQL muß man Variablen nicht definieren.
                          Daher kann man die Output Variable @Preis einfach angeben und die wird durch die Definition in der Prozedur definiert. Das SELECT @Preis gibt sie einfach nur aus- das war der lahme Versuch an den Inhalt der Variablen zu kommen.
                          Wenn man die Prozedur aus SQL heraus aufrufen würde, würde man einfach mit dem Preis weiter rechnen oder sonst was machen.
                          LG Martin

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          868
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          blockly communication
                          2
                          11
                          358
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo