-
Ich muß leider nochmal nachfragen:
- Clob-Locator definieren ist klar
- DECLARE CURSOR für den auszuführenden SELECT. ok.
- OPEN vom Cursor. auch ok.
- Dann FETCH vom Cursor. Bei into den CLob-Locator verwenden, korrekt?
Fehlt noch was?
-
Nach dem Fetch mit einem "exec sql Set ...;" den Lob-Locator dann auslesen, a) Hostvariable, b) xLOB_FILE.
-
Danke! Nach etwas Kampf mit der Definition des Locators läuft's jetzt.
-
Nun wäre es noch nett, wenn du die funktionierende Lösung (zumindest den SQL und RPG-Teil) hier darstellen und erklären würdest. Dies könnte anderen dann ebenso hilfreich sein.
Ich steuere ledglich Denkanstöße bei, zum Programmieren solcher Aktionen fehlt mir einfach die Zeit.
-
Ja, gerne.
1.) Definieren der XML-CLOB-Datei (Streamfile im IFS), eines XML-CLOB Felds als Host-Variable und des Locators als Zeiger.
DCL-S IXMLDoc SQLTYPE(XML_CLOB_FILE);
DCL-S IXMLDta SQLTYPE(XML_CLOB:1024);
DCL-S IXMLLoc SQLTYPE(XML_LOCATOR);
2.) Setzen des Zielpfads und des Dateinamens im IFS, durch die CLOB-Datei Definitionsfelder
DCL-S Xmlpath char(30) inz('/mydir/sql/out/');
IXMLDoc_Name = %trim(Xmlpath) + %trim(FileGroup) + '_' +
%trim(FileId) + '.xml';
IXMLDoc_NL = %Len(%Trim(IXMLDoc_Name));
IXMLDoc_FO = SQFOVR;
3.) Bauen des Selektions-Strings in einer Variablen
sqlstring = 'SELECT XMLDOCUMENT(XMLGROUP(TRIM(Fielda) AS "Host", +
TRIM(Fieldb) AS "Environ", TRIM(Fieldc) AS "Country" +
OPTION ROW "Testrow" ROOT "Testroot")) FROM File';
4.) SQL optionen nach Bedarf setzen
EXEC SQL
Set Option Datfmt=*iso, TimFmt=*iso,Naming=*sys,
CloSQLCsr=*EndActGrp;
5.) SQL Cursor definieren unter Verwendung der obigen Variablen
EXEC SQL
PREPARE selectstm FROM :sqlstring;
6.) Statisch können dann der SQL DECLARE, OPEN des Cursors, FETCH und SET bleiben.
EXEC SQL
DECLARE INXML CURSOR FOR selectstm;
EXEC SQL
OPEN INXML;
EXEC SQL
FETCH NEXT FROM INXML
INTO :IXMLLoc;
EXEC SQL
SET :IXMLDta = :IXMLLoc;
EXEC SQL
SET :IXMLDoc = :IXMLLoc;
EXEC SQL
CLOSE INXML;
-
Da ein Locator einen SQL-internen Speicherbereich belegt so musst du, wenn du ihn nicht mehr benötigst, mittels "FREE LOCATOR : MyLoc;" auch wieder freigeben.
Ansonsten läuft dein temporärer Speicher ziemlich voll. Wenn das viele Jobs machen und jeder Job mal so eben 1000de Lobs á 1GB erstellt ist abzusehen, wann deine AS/400 runterfährt.
Ein Fetch in einen belegten Locator impliziert keine Freigabe.
Similar Threads
-
By dschroeder in forum IBM i Hauptforum
Antworten: 14
Letzter Beitrag: 31-08-16, 15:32
-
By alex61 in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 06-07-16, 11:51
-
By alex61 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 09-06-16, 13:26
-
By Joshua in forum NEWSboard Programmierung
Antworten: 12
Letzter Beitrag: 24-11-15, 10:53
-
By labm in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 07-05-15, 07:55
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks