[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2017
    Beiträge
    12

    order by case when :a = 12 then a35#07 else feldB end, erzeugt Fehler

    Hallo,

    ich versuche in SQL nach einem Feld a35#07 zu sortieren. Dieses Feld ist als char(35) in der Tabelle definiert. Andere Aktionen damit laufen normal.
    Bei dem Versuch nach diesem Feld innerhalb eines CASE WHEN zu sortieren versucht RPG den Feldinhalt in decimal(7,0) umzuwandeln, was natürlich nicht geht.
    (Außerhalb eines CASE WHEN geht es).
    Ich wollte mir halt den Umweg über Prepare Statement sparen.

    Gibts dafür eine Lösung?
    (order by :var1, geht gar nicht)

    LG, Martin

    Joblog:
    CPD4019 SELECT/OMIT-Fehler in Feld Cast(Translate(STDDATIH_2.A35#07, *UNNAMED Table) AS Decimal(7,0)), Teildatei STDDATIH.
    SQL0802 Fehler bei Datenumsetzung oder beim Zuordnen von Daten.

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Setzt mal den Feld-Namen in Anführungszeichen, also "A35#07".
    Was passiert dann?

    Birgitta
    Birgitta Hauser

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

  3. #3
    Registriert seit
    Sep 2017
    Beiträge
    12
    Das hilft leider nicht. Habe ich schon probiert.
    Auch das Verschachteln mit einem Subselect und umbenennen der Spalte hilft nicht.
    Auch 'a35'||chr(35)||'07' hilft nicht.
    Das # wird als Anweisung zum "Cast as decimal" verstanden, und da geht bisher kein Weg vorbei.

  4. #4
    Registriert seit
    Aug 2006
    Beiträge
    2.074
    Es geht doch nichts über EDI-Probleme ;-)

    Und wenn Du eine View darüber machst?

    GG 4474

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Ein Order By erlaubt meines Wissens nach keine Ausdrücke mehr sondern bezieht sich immer auf die Ergebnisfelder.
    Also, wenn man dynamische Sortierung benötigt, dann ein berechnetes Feld bilden und danach dann sortieren:

    select ..... Ausdruck as OrderByAusdruck
    from ....

    order by OrderByAusdruck
    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

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ein Order By erlaubt meines Wissens nach keine Ausdrücke mehr sondern bezieht sich immer auf die Ergebnisfelder.
    Da bist Du falsch informiert! Im OrderBy können sowohl die Ausdrücke als auch die neuen Spalten-Namen verwendet werden.
    In den WHERE-Bedinugnen, im Group by und im Having dürfen nur die Ausdrücke, nicht jedoch die neuen Spalten-Namen angegeben werden.
    Das war aber schon immer so, dass innerhalb des gleichen Sub-Selects die neuen Spalten-Namen nicht verwendet werden dürfen.
    Order By zählt nicht zum Sub-Select und deshalb können auch die neuen Spalten-Namen verwendet werden.

    Birgitta
    Birgitta Hauser

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

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Ich habe gerade eine Datei generiert mit "exotischen" Feld-Namen und hatte keine Probleme.
    Die folgenden Statements konnten alle problemlos ausgeführt werden:

    Code:
    Create Table qtemp/mytable
    (A35#07 Integer,
     A45#08 VarChar(10));
     
    insert into myTable
    Values(1, 'AAA'), (2, 'BBB'), (3, 'CCC')
    With NC;                
    
    Select A35#07, A45#08
      from MyTable
      Where A35#07 = 2
      Order By A45#08;
    Birgitta
    Birgitta Hauser

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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Schaut euch mal die Meldung noch mal genauer an:

    "SELECT/OMIT-Fehler in Feld Cast(Translate(STDDATIH_2.A35#07, *UNNAMED Table) AS Decimal(7,0)),"

    Mit dem Feldnamen hat das nichts zu tun (der wird erkannt) sondern mit einem fehlerhaften Vergleich.
    Das Feld A35#07 wird mit einem anderen Feld oder Konstanten in Decimal(7,0) verglichen (FELDB?). Dies führt beim Optimizer leider zum Problem des falschen casts, was zur Laufzeit dann zu einem Fehler führt, wenn der Inhalt nicht konvertierbar ist.
    Sieh zu, dass der Vergleichswert eher in CHAR gecastet wird.

    Was den Feldnamen angeht, so ist das "#"-Zeichen bei einer angepassten CCSID nicht mehr ansprechbar.
    Setze den Job z.B. auf CCSID(500) und das Feld wird nicht mehr gefunden, auch nicht in Anführungszeichen. Ganz schön fatal sowas, aber das ist ja ein anderes Thema.
    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
    Sep 2017
    Beiträge
    12
    Habe das Statement jetzt auch aus anderen Gründen in Text umgebaut und mit Prepare verwendet.
    Falls du deine Testdatei noch hast probier mal so, wie es im Thema steht, also mit
    "order by case when :a = 12 then a35#07 else feldB end".

Similar Threads

  1. CASE in Kombination mit IN
    By mojo in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 27-05-15, 12:01
  2. Liste mit Spoolfile-Attributen wird automatisch erzeugt / gedruckt
    By JoergHamacher in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 13-04-15, 11:38
  3. CRTSQLRPGI erzeugt 2 Wandlungsllisten
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 04-07-14, 12:20
  4. SQL update mit order by
    By Robi in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 22-05-03, 15:14
  5. Umfrage: Wie viel Umsatz erzeugt das Nb market im Monat?
    By Burgy Zapp in forum NEWSboard Server & Hardware Markt
    Antworten: 5
    Letzter Beitrag: 08-07-02, 15:39

Tags for this Thread

Berechtigungen

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