[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Schau mal deinen SQL genau an, da ist ein cast zu viel drin!

    Lass mal char(......) weg!

    Die Funktion CHAR versucht nämlich einen CAST(... as char(1000000)) und das ist natürlich zu lang!

    PS:
    Auch der TRIM bei Digits ist unsinnig, da Digits keine Leerzeichen zurückgibt.
    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

  2. #2
    Registriert seit
    Sep 2005
    Beiträge
    425
    Der Hammer, es funktioniert!

    Danke!!!!!!

    Wenn das jetzt noch jemand erklären könnte ...

    ok mit dem 1. With wird eine Arbeitsdatei erstellt, die ...

    ok ich versuch mal das SQL Buch zu interwiewen.
    Verstanden hab ich es nicht, aber es geht ... Klasse!!

    Der glückliche ILEMax

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Weiteres siehst du hier:
    hierarchical queries
    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

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hier ist auch noch ein Artikel zu dem Thema Hierarchische Queries:
    Hierarchical Queries with DB2 Connect By

    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

  5. #5
    Registriert seit
    Sep 2005
    Beiträge
    425
    ich muß diese tolle sache nochmal aufwärmen.

    Während
    Code:
    With x as (Select Row_Number() over(Order By kkmanr, rrn(a)) as seq,
    a.*           from ankkop a where kkmanr = 38),                     
    y as (Select kkmanr, cast((sys_connect_by_path(                     
    Trim(digits(KKLFDN)), ' ')) as varchar(10000)) as Text              
                  from x                                                
                  Start With kkmanr =  38 and seq = 1                   
                  connect by Prior Seq = Seq - 1)                       
    Select kkmanr, Max(Text) as Text                                    
    From y                                                              
    Group By kkmanr
    toll funktioniert, habe ich versucht
    mehrere kkmanr's zu selektieren.

    Code:
    With x as (Select Row_Number()                                
    over(Order By kkmanr, rrn(a)) as seq,                         
                a.* from ankkop a where kkmanr between 38 and 50),
    y as (Select kkmanr, cast((sys_connect_by_path(               
    Trim(digits(KKLFDN)), ' ')) as varchar(20000)) as Text        
                  from x                                          
                  Start With kkmanr =  38 and seq = 1             
                  connect by Prior Seq = Seq - 1)                 
    Select kkmanr, Max(Text) as Text                              
    From y                                                        
    Group By kkmanr           order by 1
    im Ergebnis bekomme ich mit kkmanr = 38 das richtige Ergebnis. (5 Nr.)
    mit kkmanr 39 aber das von 38 und von 39. (also 7 statt 2 Nr.)
    Wenn ich den Start with in der seq verändere, z.B. auf 6, bekomme ich
    keine Zeile 38 aber die 39 startet richtig.
    Wie kann ich nun das SQL so umbauen, das ich nur die Nr. zu einer kkmanr bekomme, die dazu gehören?
    Danke
    Der ILEMax

  6. #6
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    versuch mal das für dich um zu bauen
    Code:
    With x as (Select Row_Number() over(partition                       
                                          By adadnr, adadn2             
                                                               ) as seq,
    a.*           from adresp a where (adadnr, adadn2) in(              
    select susunr, susun2 from schulp where susunr between 5 and 99)),  
     y as (Select adadnr, adadn2, cast((sys_connect_by_path(            
    Trim(digits(adadn3)), ' ')) as varchar(10000)) as Text              
                  from x                                                
                              Start With  seq = 1                       
                  connect by Prior Seq = Seq - 1 and                    
                             Prior adadnr = adadnr and                  
                             Prior adadn2 = adadn2 )                    
    Select adadnr, adadn2, max(Text) as Text                            
    From y                                                              
    group By adadnr, adadn2
    Benötige aber auch nen Tip:
    Wenn ich das in ein create view packe, bekomme ich einen SQL System fehler
    Hat da jemand eine Idee?

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

  7. #7
    Registriert seit
    Sep 2005
    Beiträge
    425
    Danke Robi, damit konnte ich mein Prob. lösen.
    Aber auch ich bekomme einen SQL-Systemfehler wenn ich ein create View mache (V7R1, alle PTF's)

    Dann kann ich damit nix anfangen
    Gibt es eine andere Lösung?
    Eine, die im Create View funktioniert?

    Danke
    Der ILEMax

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wie wärs dann mit einer Fehlermeldung an IBM?
    Vielleicht wird sys_connect_by_path in einer View nicht unterstützt?
    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

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Auch Umschreiben bringt nichts!
    Sieht nach CALL bei IBM aus

    ... allerdings
    Versuch mal die erste CTE als View zu generieren und diese dann in der 2. View zu verwenden.
    Code:
    Create View MyLib/MyView1
    as (Select Row_Number() over(partition                       
                                 By adadnr, adadn2) as seq,
               a.*
          from adresp a Join schulp b on adadnr = susunr and adadn2 = susun2
          where susunr between 5 and 99);
    Code:
    Create View MyLib/MyView2
    as With y as (Select adadnr, adadn2, 
                         cast((sys_connect_by_path(Trim(digits(adadn3)), ' ')) 
                               as varchar(10000)) as Text              
                    from MyView1                                                
                    Start With  seq = 1                       
                    connect by Prior Seq    = Seq - 1 and                    
                               Prior adadnr = adadnr  and                  
                               Prior adadn2 = adadn2 )                    
    Select adadnr, adadn2, max(Text) as Text                            
    From y                                                              
    group By adadnr, adadn2;
    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

  10. #10
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Hi,
    Meldung bei IBM läuft, geht wohl nach USA.
    Melde mich wenn erg da ist.
    @Birgitta, ich versuchs, wenn ich das nächste mal beim Kunden bin.

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

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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