PDA

View Full Version : DDL Tabel mit default CCSID



Seiten : 1 [2]

Fuerchau
20-10-21, 11:16
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);

Malte
20-10-21, 12:10
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?

dschroeder
20-10-21, 13:19
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.

Fuerchau
20-10-21, 13:35
Näheres siehe hier:
https://www.ibm.com/docs/en/i/7.2?topic=conversion-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.