[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Dec 2003
    Beiträge
    106

    Cool

    ** Hand vor den Kopf schlag **

    Klar, so bau ich mir auch meine Ergebnis_ds zusammen.
    Das mit den verschiedenen SQLBindCols funktioniert.
    Hab jetzt 3 verschiedene Aufrufe gemacht. Bin zwar noch skeptisch ob das alle für mich in Frage kommenden Feldtypen abdeckt, aber schau' mer mal......

    Danke für die schnelle Hilfe.

    sim

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wofür schlägst du dich denn mit den CLIAPI's rum ?
    Gehts nicht mit Standard-SQL bzw. dynamischem SQL ?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Dec 2003
    Beiträge
    106
    Nun ja, für einfache Sachen verwenden wir dies auch.

    Im Moment haben wir schon ein selbst gestricktes Serviceprogramm bzw ne Prozedur an der man jegliche Art von SELECT-Statement übergeben kann und die dann ein Ergebnis Feld zurückliefert das dann einfach in die entsprechende ds gestellt werden kann

    Bsp:
    dow sql_exec('select feld1, feld2, feld3, .... from datei... where....');
    kunden_ds = sql_ergebnis
    ....
    enddo;

    wobei kunden_ds ne datei bschreibt (extname....)

    Dies haben wir per SQLDA lösen können.


    Das Problem hierbei ist das immer nur ein SQL-Statement ausgeführt werden kann. Dadurch ist es nicht möglich verschachtelte SQL Abfragen mit diesem Tool zu erstellen.

    Wenn wir dies über die APIs hinkriegen kann ich dies ja selber steuern und somit auch mehrere SQL's
    verschachtelt ausführen.


    Das andere wäre ja auch zu einfach. ;-)

    Praktisch wäre natürlich ne RPG Anweisung a la: %sql
    *träum*

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Aber wie hältst du es dann mit den variablen Strukturen und Feldtypen ?

    Die Service-Routine müsste Funktionen wie Open(SqlString), GetField(Name), Close() usw. anbieten, da ja über die Struktur variabler Felder erst zur Laufzeit etwas bekannt ist.

    Das RPG-Programm selber kann ja nicht mit dynamischen Strukturen umgehen.
    (wobei hier die Frage aufkommt, wie du dynamische Strukturen denn statisch bindest ?)

    Ich stelle mir die Lösung für ILERPG schon reichlich kompliziert vor. In Java ist das ganze ja durch das SQL-Package gelöst (ähnlich wie ADO/DAO/ODBC auf dem PC).

    Trotzdem:
    Was ist denn Sinn und Zweck solcher dynamischer SQL's, die eigentlich besser innerhalb des jeweiligen Programmes laufen sollten ?

    PS:
    Das mit "Kunden_DS = SQL_Ergebnis" kann ja nicht funktionieren, solange nicht der "Select" ein "Select *" ist, und dann brauchst du kein Service-Programm.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Dec 2003
    Beiträge
    106
    Also,

    das Service Programm wird tatsächlich Prozeduren wie z.Bsp

    sql_openstatement(STATEMENT) --> liefert handle
    sql_closestatement(...)
    sql_execstatement.... etc enthalten

    dieses Servicepgm kann ich dann in allen ILE programmen verwenden ohne das ich umständlich mit emb. sql etc hantieren muß. einfach der prozeduren aufrufen, fertig.

    Richtig dynamisch im Sinne von irgendeinen SQL aus ner Datei lesen und den ausführen geht natürlich nicht.
    Aber immerhin kann ich in meinem jew. Programm mit 3 kurzen Anweisungen die SQLs ausführen. Vorher noch Statement definieren und Ergebnis_ds und es läuft.


    Sinn und Zweck:
    Arbeitserleichterung, siehe oben

    Ok, das mit der Kunden_ds und dem select war im Beispiel falsch. Die Kunden_ds bzw die jeweilige "Ziel_ds" muß natürlich entsprechend definiert sein.

    Ach ja, ist es denn nicht so das in einem SQLRPGLE Programm keine Binderverzeichnisse bzw externe Prozeduren bzw Serviceprogramme eingebunden werden können ?

    sim

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wer sagt denn sowas ?
    CRTSQLRPGI erlaubt die Angabe OBJTYPE(*PGM/*MODULE), was also das spätere CRTPGM mit Binden auf Service-Programme erlaubt.

    Auswahl 15 des PDM macht das automatisch.

    Wenn du also sowieso feste Strukturen zum Select definieren musst, und nicht tatsächlich dynamische SQL's benötigst (innerhalb eines Moduls), dann ist embedded SQL die bessere Alternative.

    Ausserdem, wie siehts aus mit Update/Insert ?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Dec 2003
    Beiträge
    106
    Hmm, werd ich mal ausprobieren.

    Aber unbestritten ist doch wohl der Punkt der Arbeitserleichterung. Natürlich vorausgesetzt die Performance ist die gleiche kann ich hier mit wenigen Anweisungen
    SQL Abfragen ausführen


    Updates und Inserts sollten auch kein Problem sein, natürlich mit entsprechenden Prozeduren.


    Wie gesagt haben wir bereits eine entsprechende Lösung die allerding nur SELECTs verarbeiten kann. Und verwenden dies bereits in dutzenden Programmen bei gleicher Performance und ohne große Nachteile.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Die Performance ist auch nahezu gleich (CLI ist ca. 10% langsamer).

    Trotzdem ist es einfacher und auch schneller in der Entwicklung, direkte SQL's im Programm zu verwenden.

    Ich definiere meinen Cursor
    declare xx cursor for
    select ....
    where keyx = :mykeyx ...

    Der Vorteil hier sind Parameter, die ich bei dynamischem SQL erst noch zusammensetzen muss. Zeichen in Hochkomma, Dezimal ggf. mit Dezimalpunkt usw.
    Parameter kennen das Problem nicht.

    Meistens steht man vor einem Problem, wenn ein Zeichen-Parameter selber ein Hochkomma enthält (Suche alle O'Mally), dieses ist nämlich zu verdoppeln !!!

    Oder ich erlaube wiederum Parametermarker (SQLBindParm), was die Sache verkompliziert.

    Da ich eine Struktur benötige, definiere ich halt die Struktur der Felder, wie ich sie brauche, lesen kann ich dann mittels

    fetch cursor into :structname

    wobei automatisch das 1. Feld des Selects dem 1. Feld der Struktur zugewiesen wird.

    Benötige ich ggf. noch NULL-Flags (wie siehts denn damit bei deinem Service-PGM aus), gebe ich einfach ein NULL-Flag-Array beim Fetch an.

    Bin ich sicher, dass ein Select nur einen Satz/Zeile liefert, kann ich mir sogar den Cursor sparen, indem ich direkt den

    select f1, f2, ... into :Struct
    from ...
    where key1 = :key1 ...

    ausführe.
    Also kein Open, Fetch, Close sondern genau 1 Zugriff.

    Bevor ich mich also mit deinen CLI-Schnittstellen beschäftige, habe ich den SQL (den ich ja sowieso benötige) schneller im SEU erfasst, zumal ja da auch noch Syntax-Unterstützung gewährt wird.

    Also Arbeitserleichterung sehe ich da überhaupt nicht, eher im Gegenteil !
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Dec 2003
    Beiträge
    106
    Das mit dem SQL Statement erstellen sehe ich nicht als großes Problem an. Aber ist ja Ansichtssache

    Hochkomma: geht ganz einfach per Konstante

    Null Flags sind bei uns kein Thema

    Zum Thema schneller erfasst bin ich anderer Ansicht.

    Die Schnittstelle programmier ich mir genau einmal und steck Arbeit rein. Dann kann ich sie überall verwenden.

    vielleicht sollte ich erwähnen das wir komplett in FREE RPG programmieren. Und wenn ich schon an dieses alberne END-FREE, FREE und dann noch in Kombination mit Emb.SQL denke.
    Nein danke.

    Trotzdem danke für die Hilfe.

Similar Threads

  1. RPG aus Java aufrufen
    By Vicky-B in forum NEWSboard Java
    Antworten: 17
    Letzter Beitrag: 06-05-08, 11:05
  2. ILE RPG aus Stored Procdure aufrufen
    By pfpk0997 in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 15-11-06, 09:40
  3. Dialogpgm in Batchverarbeitung aufrufen
    By falke34 in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 08-06-05, 14:08
  4. URL aufrufen
    By sarge in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 06-12-04, 08:40
  5. RPG-Procedur aus CL aufrufen
    By Peter Kosel in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-07-04, 08:17

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •