
Zitat von
Andreas_Prouza
Dafür kannst du die SQL-Funktion get_clob_from_file(pfad) verwenden.
... aber bedenke
- GET_CLOB_FROM_FILE muss unter Commitment Control ausfrührt werden.
- GET_CLOB_FROM_FILE liefert einen Large Object Locator zurück und dieser muss in RPG entsprechend mit SQLTYPE definiert werden, also DCL-S MyClobLoc SQLType(Clob_Locator);
- Ein LOB Locator kann mit SQL-Funktionen (z.B. LOCATE oder SUBSTR) wie ein normales alphanumerisches Feld behandelt werden. Eine direkte Bearbeitung mit RPG-Funktionen ist hingegen nicht möglich.
Ansonsten kannst Du auch mit IFS_READ-Funktionen die ganze IFS-Datei in einem Schwung lesen und ausgeben ... dafür musst Du das Programm NICHT (unbedingt) unter Commitment Control ausführen.
Code:
Select Line
from Table(QSYS2.IFS_READ_UTF8(Path_Name => '/home/YourDir1/YourDir2/YourIFSFile.txt',
End_Of_Line => 'NONE')) a;
Außerdem kannst Du auch die IFS-Datei direkt mit (embedded) SQL direkt als LOB_FILE lesen. Du musst lediglich die CLOB-File definieren und die vom Precompiler erstellten Daten-Struktur-Unterfelder füllen.
Für die LOB_Files gilt das gleiche wie für die LOB Locators. Sie können mit SQL-Funktionen wie alphanumerische Strings berarbeitet werden, aber nicht mit normalen RPG-Variablen und Funktionen.
Etwa so:
Code:
DCL-S MyClobFile SQLType(CLOB_File);
DCL-S MyText Char(50);
DCL-S Start Int(10);
DCL-S RowLen Int(5) inz(120);
DCL-S Index Uns(3);
DCL-S MyIFSFile VarChar(256) inz('/home/YourDir/YourIFSFile.txt');
//*******************************************************************
Exec SQL Set Option Commit=*NONE, DatFmt=*ISO, TimFmt=*ISO,
Naming=*SYS, CloSQLCsr=*EndActGrp;
MyCLOBFile_Name = %Trim(MyIFSFile);
MyCLOBFile_NL = %Len(%Trim(MyCLOBFile_Name));
MyCLOBFile_FO = SQFRD; //Read Only
For Index = 1 to 15;
Start = (Index-1) * RowLen + 1;
Exec SQL Set :MyText = Substr(:MyCLOBFile, :Start, :RowLen);
Dsply MyText;
If SQLCODE = 100 or SQLCODE < *Zeros
or %Len(%Trim(MyText)) = *Zeros;
Leave;
EndIf;
EndFor;
*InLR = *On;
Birgitta
Bookmarks