[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    2.044

    Feldnamen im Sql als Überschrift

    Hi *all,
    kann ich ein SQL (5250 strsql) so aufrufen, das ich statt des COLGHG den feldnamen bekomme?

    Hintergrund: die Datei hat gefühlte 10.000 Felder, die Überschrift ist ein Roman, ich sehe max. 3 Felder am BS. Alle (für mich relevanten) Felder mit "...as FELDX" um zu definieren ist
    1. aufwendig und
    2. brauch ich sowieso die 'echten' Feldnamen.

    Danke
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Schwarz/Grün soweit ich weiß nicht.
    IBM i Navigator - Eine Prozedur ausführen ist das Standard (da kann man auch umschalten)

    ... zum Trost, eine Datei/Tabelle kann höchstens 8.000 Spalten haben

    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

  3. #3
    Registriert seit
    May 2002
    Beiträge
    1.121
    Hallo Robi,

    erstelle dir doch mit folgenden kleinen Programm eine View.
    PHP-Code:
    h dftactgrp(*no)                                        
                                                            
    d MakeView        pr                  ExtPGM('MAKEVIEW')
    d  View_Lib                     10                      
    d  View_Name                    10                      
    d  File_Lib                     10                      
    d  File_Name                    20                      
    d MakeView        pi                                    
    d  View_Lib                     10                      
    d  View_Name                    10                      
    d  File_Lib                     10                      
    d  File_Name                    20                      
    d                                                       
    d True            c                   
    *On               
    d False           c                   
    *Off              
    d                                                       
    d String_SQL      s          32766    Inz
    ( *Blanks )    
    d String_SQL1     s          32766    Inz( *Blanks )    
    d                                                       
    d DS_Satz         ds                  Qualified                            
    d FeldName                      10                                         
    d Type                           8                                         
    d Laenge                         5s 0                                      
    d Scale                          5s 0                                      
                                                                               
     
    /free                                                                     
       
    *InLr true;                                                           
       
    Exec SQL set option commit=*none;                                       
                                                                               
       
    String_SQL  'Create view ' + %TrimView_Lib ) + '/' +                
                     %
    TrimView_Name ) +  ' as (Select ';                     
                                                                               
       
    String_SQL1 'Select sys_cname, Cast(ColType as Char(8)), ' +          
                     
    'Cast(length as dec(5, 0)), '                  +          
          
    'case when scale is NULL then 0 else Cast(scale as dec(5, 0))  end' +
          
    ' from syscolumns where sys_tname=''' + %TrimFile_Name ) +         
          
    ''' and sys_dname=''' + %TrimFile_Lib ) + '''';                    
                                                                               
      
    Exec SQL Declare CursorXX Cursor For String_SQL1;   
      
    Exec SQL Prepare String_SQL1 From :String_SQL1;     
      
    Exec SQL Open CursorXX;                             
                                                          
      
    DoW sqlcod >= and sqlcod <= 100;                  
                                                          
        
    Exec SQL  Fetch Next From CursorXX into :DS_Satz
                                                          
        If 
    sqlcod <> 0;                                   
          
    Leave;                                          
        EndIf;                                            
           
    ExSr SR_Work;                                  
      
    EndDo;                                              
                                                          
      
    Exec SQL  Close   CursorXX;                         
                                                          
      
    String_SQL = %SubSt( %TrimString_SQL ) : :      
                          %
    Len( %TrimString_SQL ) ) -1);
                                                          
      
    String_SQL = %TrimSTring_SQL ) +                                 
                   
    ' from ' + %TrimFile_Lib ) + '/' +                  
                   %
    TrimFile_Name) + ')';                              
                                                                         
      
    Exec SQL Execute Immediate :String_SQL;                            
                                                                         
      
    BegSr SR_Work;                                                     
                                                                         
      
    Select;                                                            
      
    When ds_satz.type 'DECIMAL' or                                   
           
    ds_satz.type 'NUMERIC';                                     
           
    String_SQL = %TrimString_SQL ) +                            
                        
    ' Cast( ' + %Trim(ds_satz.feldname) +            
                        
    ' as Dec(' +%Trim(%Char(ds_satz.Laenge)) + ', ' +
                        %
    Trim(%Char(ds_satz.Scale)) + ')) as ' +         
                        %
    Trim(ds_satz.feldname) + ', ';                  
      
    When ds_satz.type 'CHAR';                                        
           
    String_SQL = %TrimString_SQL ) +                            
                        
    ' Cast( ' + %Trim(ds_satz.feldname) +            
                        
    ' as Char(' +%Trim(%Char(ds_satz.Laenge)) + ')) ' 
                        
    ' as ' + %Trim(ds_satz.feldname) + ', ';            
      
    EndSl;                                                                
      
    EndSr;                                                                
                                                                            
     /
    end-free 
    Eventuell musst du dir in der SR_Work noch weitere Feldtype bearbeiten.
    Auch sollte keine View mit dem Namen in der Lib schon existieren.

    Aufruf mit
    Call Makeview (ViewLib ViewName Mylib MyFile)

    Gruß
    Ronald

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Sauber ...
    Wie cool ist das den !!!
    Copiert, gewandelt, aufgerufen, angesehn begeistert!!!
    Echt hilfreich, DANKE
    (wir haben zwar auch Pgmme , die Views nach best. Mustern / Vorgaben erstellen, aber auf die Idee das so zu lösen muß man erstmal kommen!)

    Vielen vielen Dank
    Sonnigen Gruß vom Steinhuder Meer
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  5. #5
    Registriert seit
    May 2002
    Beiträge
    1.121
    Das ist das Ergebnis, wenn man schon im Urlaubmodus ist, und Nachts nicht schlafen kann..


    Schönes Wochenende
    Ronald
    (Der dann ab Morgen im Elsass ist)

Similar Threads

  1. Andruck der Überschrift
    By Stefan_R in forum NEWSboard Drucker
    Antworten: 2
    Letzter Beitrag: 11-06-01, 09:55

Berechtigungen

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