[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Korrekt. Wobei inzwischen %char() und %ucs2() weitgehend überflüssig sind, da die Runtime inzwischen so intelligent ist, dass sie das automatisiert.

    Was UTF8 angeht, so musst du hier theoretisch die 4-fache mögliche Zeichenkapazität berücksichtigen, wobei 2-fach ausreicht, ein Ü belegt 2 Bytes, in ein 30-stelliges Feld bekommst du dann nur 15 Ü's. Gespart hast du da nichts. Deshalb NCHAR, das ist generell 2 Bytes je Char.

    Außerdem:
    Mach mal mit SQL ein Select auf ein UTF8-Feld, DSPPFM u.ä. Dies betrifft also nicht nur RPG sondern alle Zugriffe incl. ODBC/JDBC. Alleine um einen Substring bzw. %subst() korrekt durchzuführen musst du das Feld erst mal in UCS2 wandeln, da Umlaute ja die Zeichenposition bereits verschieben.
    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
    Jun 2013
    Beiträge
    69
    ok ich hab das bei mir jetzt mal getestet und die Felder in einer Tabelle von VarChar zu nVarChar geändert.

    Bin positiv überrascht das dieses ohne Datenverlust funktionierte

    habe beim RPG jetzt nur wie du beschrieben hast ein Problem beim %Trim und %SubStr

    Das ist jetzt ein bisschen gewöhnungsbedürftig
    %trimr(FELD:%ucs2('/'))

    Aber vielleicht lässt die IBM hier dann auch mal eine schlaue Konvertierung von Konstanten zu

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    dcl-s SchraegStrich ucs2(1) inz(%ucs2('/'));

    %trimr(FELD:SchraegStrich)

    Das Problem ist doch, dass in der Quelle das Zeichen "/" in EBCDIC angegeben ist, du aber UCS2 benötigst. Dies geht halt dann nur mit Cast oder eigenen Konstanten.
    Da aber Unicode keine weitere Codewandlung erfährt, kannst du Konstanten auch in der u-Notation schreiben:

    %trimr(FELD:u'002F') // x'2F' = "/"

    Übrigens: Für die U-Notation hilft dir die Windows "Zeichentabelle".
    Wählst du ein Zeichen aus, wird dir in der Fußzeile die u-Notation angezeigt.

    Wenn du das mit dem %ucs2 lässtig findest, kannst du ja auch SQL nehmen;-):

    exec sql set : Ziel = trim(trailing '/' from : Quelle);
    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
    Jun 2013
    Beiträge
    69
    das mit der U-Notation kenn ich werde auch mal überlegen für die Konstanten dann einen Include Quelle anzulegen.

    um den Code dafür raus zu finden nutzte ich sehr gerne diese Seite
    https://unicode-table.com/de/

    Wie definiere ich denn dann am Besten CLOB und BLOB?
    Ohne Angabe von CCSID oder dann mit 1200?

  5. #5
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Wenn du unicode im clob speichern willst, solltest du den clob im Programm als dbclob (Double Byte Clob) mit ccsid(1200) definieren.
    Ob es noch eine andere Lösung gibt, weiß ich nicht.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Näheres siehe hier:
    https://www.ibm.com/docs/en/i/7.2?to...-default-ccsid

    the CCSID for DBCLOB will be 1200.

    Allerdings lohnt sich hier eine Redefinition einer DBCLOB-Variable, da diese als DS definiert und in ILERPG schwer zu handhaben ist:

    dcl-ds mydbclobds;
    wrkDBCLOB sql_type(DBCLOB:16000K);
    wrkDBChar ucs2(8000000) varying pos(1);
    end-ds;

    Varying-Felder werden native unterstützt während das DBCLOB umdefiniert wird:

    The following declaration in fixed-form:
    D MYCLOB S SQLTYPE(DBCLOB:1000)
    results in the generation of the following structure:
    D MYCLOB DS
    D MYCLOB_LEN 10U
    D MYCLOB_DATA 1000C

    Da ist das Ansprechen halt etwas zeitaufwändiger und RDI kennt die Auflösung ja nicht.
    Durch die Üerlagerungsdefinition kann man wieder vernünftig mit dem Feld arbeiten.
    16000K ist übrigens die Maximalgröße da eine DS max. 16 MB groß sein kann, allerdings die Längeninformation noch dazu kommt, so dass 8M nicht geht.
    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. SQL UDF mit Tabel
    By malzusrex in forum NEWSboard Programmierung
    Antworten: 18
    Letzter Beitrag: 22-01-20, 09:46
  2. SQL - Create Tabel - Objektberechtigung *PUBLIC auf *CHANGE
    By loisl in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 23-05-16, 15:23
  3. create tabel ohne level check
    By DEVJO in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 29-09-15, 14:07
  4. System Default-Parameter
    By Toschie in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 15-01-15, 11:26
  5. DEFAULT-instanz in HTTP-server
    By karin-vogelmann in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 21-03-03, 12:39

Berechtigungen

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