Anmelden

View Full Version : Logische mit SST und TRNTBL



fdh
23-02-16, 09:07
Hallo,

folgende Aufgabenstellung konnte ich bisher nicht lösen.

Bei einem Alpha Feld soll eine Stelle separiert werden, damit nach diesem Feld sortiert werden kann. Alles kein Problem.
0019.00 !!! A NOTITB
0020.00 !!! A KENNZ I SST(NOTITB 50 1)

Es soll aber bei diesem Feld nicht nach Gross-/Kleinschreibung sortiert werden, sondern ein grosses 'X' soll bei einem kleinen 'x' stehen. Sämtliche versuche dies über TRNTBL zu lösen schlugen schon bei der Umwandlung fehl.
-------
!!! A NOTITB I TRNTBL(QUSRSYS/Q273)
!!! A KENNZ I SST(NOTITB 50 1)
* CPD7948 30 1 Message . . . . : Key, select, or omit field name not found in logical file.
* CPD7996 30 1 Message . . . . : CONCAT, TRNTBL, or SST field not allowed on SST keyword.
-------
!!! A NOTITB
!!! A KENNZ I SST(NOTITB 50 1)
!!! A TRNTBL(QUSRSYS/Q273)
* CPD7701 20 1 Message . . . . : Indicated keyword not allowed with SST keyword.

Kennt jemand eine Lösung?

Gruss
Franco

Fuerchau
23-02-16, 11:20
Per DDS ist das nicht mehr zu lösen.
Aber SQL erlaubt eben auch folgendes:

create index myindex (f1, f2, upper(substr(f3, 50, 1)) as fx) on mytable

Da Indizes von RPGLE wie normale LF's verwendet werden können, müsste das gehen.

dschroeder
23-02-16, 17:12
Ich denke, mit DDS müsste es auch noch gehen.

In der Source der LF muss eine Zeile eingetragen werden, in der eine (eigene) Umsetztabelle angegeben wird (bei uns heißt die Umsetztabelle U_GKSORT (GKSORT steht für "Groß/Klein-Sort")

A ALTSEQ(U_GKSORT)

In dieser Umsetztabelle haben wir alle Zeichen nach unseren Sortwünschen eingetragen:



Sortierfolge anzeigen

Tabelle: U_GKSORT Bibliothek: UNITOOL
CCSID-Wert: 65535

Folge Zeich. Folge Zeich. Folge Zeich. Folge Zeich.
0010 0160 é 0310 / 0460 É
0020 â 0170 ê 0320 Â 0470 Ê
0030 { 0180 ë 0330 [ 0480 Ë
0040 à 0190 è 0340 À 0490 È
0050 á 0200 í 0350 Á 0500 Í
0060 ã 0210 î 0360 Ã 0510 Î
0070 å 0220 ï 0370 Å 0520 Ï
0080 ç 0230 ì 0380 Ç 0530 Ì
0090 ñ 0240 ~ 0390 Ñ 0540 `
0100 . 0250 $ 0400 , 0550 :
0110 < 0260 * 0410 % 0560 #
0120 ( 0270 ) 0420 _ 0570 §
0130 + 0280 ; 0430 > 0580 '
0140 ! 0290 ^ 0440 ? 0590 =
0150 & 0300 - 0450 ø 0600 "

0610 Ø 0690 g 0760 N 0840 T
0620 a 0690 G 0770 o 0850 u
0620 A 0700 h 0770 O 0850 U
0630 Ä 0700 H 0780 ö 0860 Ü
0630 ä 0710 i 0780 Ö 0860 ü
0640 b 0710 I 0790 p 0870 v
0640 B 0720 j 0790 P 0870 V
0650 c 0720 J 0800 q 0880 w
0650 C 0730 k 0800 Q 0880 W
0660 d 0730 K 0810 r 0890 x
0660 D 0740 l 0810 R 0890 X
0670 e 0740 L 0820 s 0900 y
0670 E 0750 m 0820 S 0900 Y
0680 f 0750 M 0830 ß 0910 z

0680 F 0760 n 0840 t 0910 Z
0920 € 1070 ¼ 1220 ª 1370 ÷
0930 µ 1080 ½ 1230 º 1380 æ
0940 ¡ 1090 ¾ 1240 * 1390 ¸
0950 ¿ 1100 ¬ 1250 ô 1400 Æ
0960 Ð 1110 | 1260 ¦ 1410 ²
0970 Ý 1120 ¯ 1270 ò 1420 Ô
0980 Þ 1130 ¨ 1280 ó 1430 \
0990 ® 1140 ´ 1290 õ 1440 Ò
1000 ¢ 1150 × 1300 ý 1450 Ó
1010 £ 1160 « 1310 ¹ 1460 Õ
1020 ¥ 1170 » 1320 û 1470 0
1030 · 1180 ð 1330 } 1480 1
1040 © 1190 þ 1340 ù 1490 2
1050 @ 1200 ± 1350 ú 1500 3
1060 ¶ 1210 ° 1360 ÿ 1510 4

1520 5
1530 6
1540 7
1550 8
1560 9
1570 ³
1580 Û
1590 ]
1600 Ù
1610 Ú
1620


Aber ich würde SQL für die bessere Lösung halten.

Dieter