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.
    • 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

                        517
                        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