View Full Version : embedded SQL / dynamische SET-Anweisung
Mit SQL läßt sich, wie in diesem Beispiel ...
/end-free
C/EXEC SQL
C+ set :Erg = 0
C/END-EXEC
/free
einer internen Variablen ein Wert zuweisen. Gibt es die Möglichkeit, diese Anweisung dynamisch zusammenzustellen, wie in dem nachfolgendem nicht funktionierenden Beispiel angedeutet:
MySql = 'set :Erg = 0';
/end-free
C/EXEC SQL
C+ PREPARE MYSQL FROM :MYSQL
C/END-EXEC
C/EXEC SQL
C+ execute MySQL
C/END-EXEC
/free
Mit der Select-Anweisung läßt sich ähnliches realisieren, aber das wäre nicht besonders performant.
Dynamische Set-Anweisungen werden nicht unterstützt!
Warum initialisierst Du Deine Host-Variablen eigentlich nicht direkt?
Ansonsten ist eine Prepare und anschließende Execute-Anweisung (oder eine EXECUTE IMMEDIATE-Anweisung) auch nicht besonders performant, da die Syntax-Prüfung zur Laufzeit erfolgen muss.
Birgitta
Es geht geht mir nicht um das Initialisieren von Variablen. Es steckt schon ein wenig mehr hinter meiner Frage. So möchte ich gern Formeln in einer Tabelle ablegen, die von den Anwendern/Programmierern gepflegt werden können (Rabattstaffeln, Preiskalkulationen etc.). Definierte Platzhalter werden dann durch interne Variablen ersetzt. Als Ergebnis wird dann ein numerischer Wert (Preis, Menge) zurückgegeben. Wenn es funktionieren würde, könnte ich meine Programme sehr flexibel darauf aufbauen.
Dann musst du daraus dynamische Funktionen erstellen, die du dann statisch aufrufst:
create function myfunc ...
set :myvar = myfunc
drop function myfunc
Performant ist das sicherlich nicht.
RPG/LE ist eben für dynamische Formeln nicht so geeignet.
Aber mit dem Select ist das doch gar nicht so schlecht.
Du benötigst halt nur eine Datei mit genau einem Satz.
@Stannek
Die einzige Möglichkeit wie man so etwas machen kann ist hier beschrieben:
Ausführen von in alphanumerischen Strings gespeicherten Rechenoperationen (http://www.inn-online.de/iNN-eNews0503.html#Tekki2)
Du packst die einzelnen Statements in eine RPG-Funktion.
Dann knuddelst Du in dem rufenden Programm Deine Formel zusammen und übergibst sie an die Funktion.
Beispiel:
/Free
Formel = %Char(MyFeld1) + ' * (' + %Char(MyFld2) + ' + ' + %Char(MyFld3) + ') / ' + %Char(MyFld4);
Ergebnis = DynBerechnung(Formel);
/End-Free
Birgitta
Das hört sich ja nicht schlecht an. Leider kann ich den Link zur dynamischen Berechnung nicht aufrufen.
Das hört sich ja nicht schlecht an. Leider kann ich den Link zur dynamischen Berechnung nicht aufrufen.
Der Link müsste jetzt funktionnieren!
Ausführen von in alphanumerischen Strings gespeicherten Rechenoperationen (http://www.inn-online.de/iNN-eNews0503.html#Tekki2)
Birgitta
Das dort angegebene Beispiel entspricht dem, was ich bereits als Alternative programmiert habe. Dann geht es halt nicht anders.
Trotzdem vielen Dank !