[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wie gesagt, du kannst den SQLTYPE( DBCLOB : 1M) per based Pointer mit VARUCS2 redefinieren und dann ganz normal als RPG-Variable verwenden.
    Das ist auch äußerst praktisch für die IFS-Ausgabe per CLOB_FILE.
    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
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Wie gesagt, du kannst den SQLTYPE( DBCLOB : 1M) per based Pointer mit VARUCS2 redefinieren und dann ganz normal als RPG-Variable verwenden.
    Das ist auch äußerst praktisch für die IFS-Ausgabe per CLOB_FILE.
    Und warum sollte ich mir das antun?
    Ich kann das Ganze gleich so wie ich es brauche mit SQL aufbereiten und das Ergebnis dann nach RPG übertragen.
    i.Ü. sind RPG-Variablen auf 16MB beschränkt, IFS-Dateien dagegen auf 2GB
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Weil es schneller ist und funktioniert. Ich habe das schon gebaut, bevor es die anderen IFS-Zugriffe überhaupt gab. Damit lese ich z.B. EDI-Dateiformate aus und erstelle EDI-Dateien.
    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. Datei mit leerem Datei-Namen im IFS
    By KingofKning in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 11-03-15, 18:24
  2. IFS Datei.txt --> Datenbank-Datei
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 16
    Letzter Beitrag: 02-10-09, 12:43
  3. Auslesen eines Blobs und Datei ins IFS schreiben
    By Frank Pusch in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 21-10-08, 13:15
  4. IFS ASCII Datei ohne CR in eine iseries Datei kopieren die Satzlänge 80 hat
    By Michael_Wien in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 24-01-08, 15:13
  5. Datei auslesen mit CL-Programme
    By Jenne in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-10-04, 10:21

Berechtigungen

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