Zitat Zitat von Andreas_Prouza Beitrag anzeigen
Dafür kannst du die SQL-Funktion get_clob_from_file(pfad) verwenden.
... aber bedenke
  1. GET_CLOB_FROM_FILE muss unter Commitment Control ausfrührt werden.
  2. 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);
  3. 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