PDA

View Full Version : Sortieren



niki
06-10-04, 20:40
Hallo,
wie kann man in einer SQL-Abfrage unter AS/400 sortieren, sodass Umlaute berücksichtigt werden. Unter Oracle wird dies so gemacht:
select kunden_nr, name
from kunde
order by nlssort(name, 'NLS_SORT=german');

Gibt es unter AS/400 etwas ähnliches?

Vielen herzlichen Dank im voraus!
Niki
:confused:

Fuerchau
06-10-04, 22:26
Das ist leider eine Einstellung, die VOR dem Aufruf des SQL's-Programms (oder STRSQL) im Job gemacht werden muss.
CHGJOB LANGID(DEU) SRTSEQ(*LANGID) oder so ähnlich.

Zu beachten ist allerdings, dass dies ziemlich lange dauern kann, da solche Zugriffspfade eher selten existieren.
Besser ist es da eine LF (keine SQL-View) zu erstellen, die das Sortierfeld bereits enthält.

Ausserdem betrifft diese Einstellung ALLE SQL's mit Sortierung.

BenderD
07-10-04, 13:54
Hallo,

ergänzend sei noch angemerkt, dass hier auch eine TABLE zur Umsetzung fest am Programm vernagelt werden kann (SET OPTION SRTSEQ ....). Aber auch hier gilt, dass man das innerhalb des Programmes/Jobs nicht umschalten kann.
Am flexibelsten geht es mit ORDER BY und TRANSLATE, da kann man das Sortierfeld entsprechend manipulieren, wie man es braucht.

Zu den "Kosten": die dürften eigentlich nicht so hoch sein, wenn ein Index existiert (sortieren eines fast sortierten Baums).

@Baldur: das mit der LF bringt einen im SQL nicht weiter! Das SELECT from MeinerLF wird auf die PF umgelenkt und ein ORDER BY muss ich trotzdem angeben, wobei der Zugriffspfad dann wieder neu berechnet wird.

mfg

Dieter Bender


Das ist leider eine Einstellung, die VOR dem Aufruf des SQL's-Programms (oder STRSQL) im Job gemacht werden muss.
CHGJOB LANGID(DEU) SRTSEQ(*LANGID) oder so ähnlich.

Zu beachten ist allerdings, dass dies ziemlich lange dauern kann, da solche Zugriffspfade eher selten existieren.
Besser ist es da eine LF (keine SQL-View) zu erstellen, die das Sortierfeld bereits enthält.

Ausserdem betrifft diese Einstellung ALLE SQL's mit Sortierung.

Fuerchau
08-10-04, 08:59
Das Problem beim NLS-Sort ist die Zeichenwertigkeit. Eine LF, die bereits einen passenden Sort ausweist wird vom Optimizer verwendet (auch bei NLS) und zwar (wie du korrekt sagst) unabhängig ob ich auf die PF oder LF gehe.
Ich habe nur die LF erwähnt, da ich nicht weiß wie per CREATE INDEX eine Spalte per NLS sortiert wird.

BenderD
08-10-04, 11:10
Hallo,

für die Sort Sequence bei der Erstellung eines Index gilt dasselbe Regelwerk wie für die Verwendung, es werden die Attribute von SRTSEQ und gegebenenfalls LANGID des Jobs zur Erstellung des Zugriffspfades herangezogen und gegebenen Falls die entsprechende Table am LF vernagelt (Attribut SRTSEQ im DSPFD)

Dieter Bender


Das Problem beim NLS-Sort ist die Zeichenwertigkeit. Eine LF, die bereits einen passenden Sort ausweist wird vom Optimizer verwendet (auch bei NLS) und zwar (wie du korrekt sagst) unabhängig ob ich auf die PF oder LF gehe.
Ich habe nur die LF erwähnt, da ich nicht weiß wie per CREATE INDEX eine Spalte per NLS sortiert wird.