NEWS
[gelöst] MySQL Stored Procedure in Blockly aufufen
-
habe das mal kurz getestet - funktioniert
schalte mal das debug im block ein bei loglevel - vielleicht siehst du dann mehr
-
@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 -
@liv-in-sky
Hey, eben getestet und die Prozedur funktioniert:
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
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 -
@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.
weißt du, wie man die output variable in so einem call bekommt ? wird die vom adapter geliefert ?
-
@martin-schlender sagte in MySQL Stored Procedure in Blockly aufufen:
SELECT @Preis;
hast du mal probiert, die datenbank mit anzugeben ?
select @Preis from .......
-
@martin-schlender wo rufst du eigentlich das select@Preis auf
wenn ich es in der procedure mache kommt das:
-
@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:
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 -
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
-
@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