[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Dec 2015
    Beiträge
    18

    SQL-Funktion mit cpytoimpf-Aufruf

    Vorweg: mein Betriebssystemrelease ist 6.1
    Ich möchte in einem SQL-Skript je Mandant eine Datei in jeweils ein Mandantenverzeichnis ins IFS kopieren. Quell-, Zieldatei und Pfad habe ich in einer Datei je Mandant definiert.
    So soll das dann ausschauen:
    SELECT CopyToIFS(WorkLib, 'V40DEB', WorkFile, ExpTabNam, Pfad) FROM MIGMANDTAB
    D.h. ich rufe eine SQL-Function innerhalb eines SELECTs auf die o.g. Mandantendatei auf, welches mir den CPYTOIMPF ausführt.
    Da ich in einer Funktion kein CL-Befehl ausführen kann, habe ich mir auf der AS ein CL geschrieben mit diesen 5 Übergabeparametern + cpytoimpf. Dieses CL rufe ich aus einer SQL-Prozedur auf. (Funktion geht leider nicht, da ein CL ja keinen Return-Parameter hat).
    Die SQL-Prozedur rufe ich jetzt aus der SQL-Funktion CopyToIFS aus.
    Ist zwar ein kleiner Umweg, funktioniert aber, wenn ich nicht gerade einen cpytoimpf im CL aufrufe.
    Die Daten werden zwar ins IFS sauber kopiert, dann aber hängt mein Job.
    Vermutlich hängt es mit dieser Aussage im Joblog zusammen:
    Befehl *LIBL/CPYTOIMPF nicht sicher für Job mit mehreren Threads.
    Wird auch durch die Thread-Anzeige des Jobs bestätigt:
    Aus- Gesamt- Aux Ausführungs-
    wahl Thread Status CPU I/O priorität
    000000BA TIMW 0,066 100 20
    000000BB THDW 0,017 89 20
    Im Aufrufstapel des Thread 000000BB sehe ich u.a. meine Funktion und das CL. Mein Verdacht ist, dass der erste auf die Beendigung des zweiten wartet. Dieser geht aber nicht auf Ende, warum auch immer (vielleicht weil er nicht sicher für Jobs mit mehreren Threads ist?), und deswegen hängt das ganze.
    Lt. meiner Jobbeschreibung werden mehrere Threads aber nicht zugelassen. Andererseits steht in meinen Jobausführungsattributen die "Maximale Anzahl Threads" auf *nomax.
    Zur Info noch: wenn ich die o.g. Prozedur direkt per Call aufrufe, funzt es! Es scheint also auch mit den mehreren Schichten Skript -> Funktion -> Prozedur -> CL zusammenzuhängen oder allein an der Funktionsschicht.
    kann mir jemand sagen:
    - wie ich den cpytoimpf multi-thread-fähig bekomme?
    - gibt es in SQL eine Option, die bewirkt, nur einen Thread zu öffnen?
    - wie ich den 2.Thread beende, damit der 1. weiterläuft?
    - gibt es eine Alternative zum cpytoimpf um Daten als csv-Datei ins IFS zu kopieren, die in einem einzigen Thread oder sicher in mehreren Threads läuft?
    - fälle jemand zu dem Konstrukt mit Skript -> Funktion -> Prozedur -> CL eine einfachere Alternative ein?

    Vielen Dank schon mal für die Unterstützung.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich glaube, alle deine Fragen lassen sich da mit "Nein" beantworten.
    - CPYTOIMPF bekommst du nicht threadsave
    - es gibt keine SQL-Option, die Multithread verbietet
    - Es gibt zwar C-Funktionen für Threads, aber in SQL Threads zu killen ist gefährlich
    - Eine Alternative kannst du selber schreiben, allerdings nicht in ILE/RPG aber z.B. in Java (ist Threadsave)
    - Eine andere Lösung ist eher ein CLP, dass z.B. eine QMQRY-Funktion zum Selektieren der Daten mit Outfile aufruft (QMQRY kann nur 255 Spalten!) um anschließend den CPYTOIMPF aufzurufen.
    Alternativ zum QMQRY kann man auch einen RUNSQL mit einem "create table … as select … with data" zusammenklöppeln, mit einem vorherigen DLTF.#

    Auch wenn nun Dieter (D*B) nun wieder die Hände über den Kopf schlägt...

    Nachtrag:
    Statt CLP kann man auch CLLE verwenden, die haben wieder einen Returnwert.
    Alternativ gibt es noch die Aufrufkonvention SQL, dann sind NULL-Anzeiger als auch der Returnwert eigene Parameter.
    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

Similar Threads

  1. YYYYMMDD per SQL Funktion
    By andigoering in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 23-05-17, 14:09
  2. SQL-Aufruf eines Webservices in SQL-Funktion einbauen
    By KM in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 09-02-17, 10:39
  3. Funktion die ich vermisse
    By AS400.lehrling in forum Intern - Hilfe - Feedback - Tests-Forum
    Antworten: 4
    Letzter Beitrag: 20-10-15, 20:24
  4. SQL Funktion IN oder OR
    By XMan in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 28-07-15, 21:41
  5. SQL Funktion " Like"
    By Stefan_R in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 23-01-02, 16:08

Berechtigungen

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