[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2

Hybrid View

  1. #1
    Registriert seit
    Feb 2006
    Beiträge
    3

    Exclamation

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Es gibt da noch einen kleinen Trick.
    QMQRY interpretiert den SQL erst nachdem die Variablen gefüllt sind.
    Der Inhalt jeder Variable kann bis zu 55 Zeichen lang sein.
    Nun kann man also einfach einen QMQRY erstellen:

    &V1&V2&V3&V4&V5

    Per CLP kann der SQL nun in einer Variablen zusammengebaut werden.
    Per "
    STRQMQRY ... SETVAR((&V1 (%SST(&MYCLVAR 1 55)) (&V2 (%SST(&MYCLVAR 56 55)) ....)
    kann dann jeder beliebige SQL übergeben werden.

    (...)
    Da gibt's aber ein Problem (arbeite unter V5R4)!
    Es werden alle Variablenwerte, die ich dem SETVAR übergebe, getrimmt.
    Trifft man zwischen zwei %SST, also z. B. auf Position 55, genau vor oder hinter ein Blank, so wird dieses Blank in der QMQRY-Verknüpfung &V1&V2&V3.... nicht wieder eingefügt.

    Sieht in etwa so aus:

    &myquery ('select a, b, c, d, e from KundenPF inner join UmsatzPF on etc=blabla WHERE a=b')

    &V1 wird: %SST(&myquery 1 55) = 'select a, b, c, d, e from KundenPF inner join UmsatzPF '

    &V2 wird: %SST(&myquery 56 55) = 'on etc=blabla WHERE a=b'

    Im QM-Qry wird das ganze dann jedoch so zusammengesetzt:
    "select a, b, c, d, e from KundenPF inner join UmsatzPFon etc=blabla WHERE a=b"

    Da steigt er bei mir aus, da der Blank zwischen UmsatzPF und on verloren genagen ist!

    Liegt's am Release, oder kann man bei der Variablenübergabe 'was anders machen, so dass führende/folgende Blanks den SETVAR überleben?

    Danke und Gruß
    Thomas

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.880
    Nunja, im QMQRY
    &V1 &V2 &V3 &V4 &V5
    definieren und beim Splitten dafür sorgen, dass nur bei Leerzeichen getrennt wird.
    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
    Feb 2006
    Beiträge
    3
    Danke für den Tipp.
    Das habe ich mal so umgesetzt!
    Zähle ich also ab Stelle 55 zurück bis zum nächsten Blank, dann trenne ich und fülle die nächste Variable.

    Einziger Nachteil: Ich kann keine Blanko-Ausdrücke wie z. B. ' abcde ' mehr verwenden, jedenfalls nicht, ohne unsicher zu sein, dass so ein String mit Blanks nicht wieder richtig zusammen gesetzt wird (SETVAR-Trim schnibbelt allles hinweg).

    Naja, kann man ja mit leben.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.880
    Die Alternative wäre nur noch ein ILERPG mit dynamischem SQL:

    d MyStmt 10000 varying

    exec sql prepare MyStmt from : MyStmt;
    exec sql execute MyStmt;

    oder REXX.
    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 2005
    Beiträge
    8
    Zitat Zitat von Sony Beitrag anzeigen
    Hallo zusammen

    Ich möchte in einem CL ein SQL Statement (INSERT) ausführen und einen Parameter mitgeben.

    Ist das möglich?

    Folgendes habe ich schon probiert:

    1. Mit RUNSQLSTM kann ich zwar mein SQL Statement ausführen, aber keinen Parameter mitgeben.

    2. Mit STRQMQRY kann ich zwar einen Parameter mitgeben, aber kein INSERT Statement ausführen.

    3. Mit STRQSH oder QSH kommt nach Ausführung des SQL Befehls immer ein Terminalfenster, welches nicht erscheinen sollte.

    4. Den Befehl RUNSQL findet das CL gar nicht.

    Ich bin für jede Hilfe dankbar.

    Viele Grüsse,

    Sony
    das terminalfenster das sie kriegen und nicht wollen beim QSH können sie auch unterdrücken. beispiel: qsh cmd('db2 "insert into x select * from y">/tmp/idontneedit')

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.880
    Am einfachsten mit "> /dev/null ", das erzeugt keine Datei.
    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
    Jan 2007
    Beiträge
    189
    RUNSQL SQLSTMT('insert into x select * from y')

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.880
    RUNSQL ist wohl eher ein Freeware-Tool und gehört standardmäßig nicht zum OS.
    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
    Jan 2007
    Beiträge
    189
    Jo, stimmt, aber heißt nicht das wir es deswegen nicht nutzen soll.
    Wenn mann die Source haben will....

  10. #10
    Registriert seit
    May 2008
    Beiträge
    21
    RUNSQL gibt es auch kostenlos unter: RUNSQL

  11. #11
    Registriert seit
    Nov 2003
    Beiträge
    2.450
    Worum geht's in diesem Thema eigentlich? Ist das Problem inzwischen vielleicht schon behoben?

Similar Threads

  1. dynamisches SQL
    By redsky in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 06-12-05, 11:23
  2. SQL in CL
    By RLPforum in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 15-11-05, 12:04
  3. Dynamisches SQL
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 15-11-05, 11:45
  4. Erstellen Trigger über SQL / Read Funktion
    By GHoffmann in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 07-07-05, 09:18
  5. SQL in CL einbinden ?
    By Helwo in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 08-08-01, 08:50

Berechtigungen

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