View Full Version : SQLRPGLE / Cursorname dynamisch erzeugen
Hallo zusammen,
ich habe eine kurze Frage, und zwar, ist es in SQLRPGLE möglich den Corsornamen z.B. aus einer Variabele zu lesen, bzw. diesen irgendwie dynamisch zu setzen ?
z.B.
exec sql PREPARE c1 FROM :sqlstm;
hier soll der Cursoname c1 variabel sein.
Danke.
MfG
Haunted
Dies ist leider nicht möglich, da der Cursorname beim Open/Fetch/Close statisch im Programm angegeben werden muss.
Aber wozu auch ?
Nach einem Close C1 lässt sich mittels Prepare C1 from der Cursor ja neu definieren, so dass der nächste Open den neuen Select ausführt.
Einen dynamischen Cursor benötigt man absolut nicht.
Verwendet man sogar beim Fetch eine SQLDA läßt sich sogar der Select absolut dynamisch verarbeiten.
Mittels Describe Statement lassen sich auch dei Felddefinitionen in eine SQLDA auslesen, so dass man nur noch per %alloc() Speicher für die Inhalte zuweisen muss.
Ansonsten ist nur das etwas mühsame CLI-Interface (C-SQL-Routinen) verwenden.
Hi,
danke für deine Antwort.
Wir benötigen dies da wir die Cursors offen halten, da wir die Daten eventuell weiterlesen wollen. (Paging).
MfG
Haunted
Da solltest du dir wohl eine andere Lösung einfallen lassen.
Das Offenhalten verstehe ich so nämlich nicht.
Wenn ein Programm mehrere Cursor benötigt kann es diese doch selber offen halten.
Was natürlich nicht geht, ein zentrales Unterprogramm für beliebige dynamische SQL's zu stricken.
Das ist auch nicht die richtige Vorgehensweise beim Arbeiten mit SQL.
Am Besten ist es tatsächlich, dass jedes Programm für sich die nötigen statischen SQL's enthält.
Das ist immer performanter und auch übersichtlicher.
Offengehalten wird der Cursor deswegen, weil z.B. zuerst die ersten 200 Datensätze verarbeitet werden und dann ja nach bedarf die nächsten 200.
Ich hatte an ein kleines Unterprogramm gedacht, an den ich nur ein SQL Statement übergeben muss und dann mein Ergebnis im gewünschten Dateiformat zurück bekomme.
Dies sollte einmal mit dynamischen und einmal mit embedded SQL funktionieren.
Mit dem dynamischen SQL funktioniert dies auch soweit. Nur kann ich dann eben in einem Programm nicht mehrere Selects gleichzeitig offenhalten.