Anmelden

View Full Version : SQL -> CREATE VIEW



Seiten : [1] 2

Kaufmann
10-05-06, 07:30
Ich benötige zwei log. Dateien die in einem Feld eine alternative Sortierung aufweisen.
Um dies zu bewerkstelligen habe ich schon versuch die Tabellen über SQL zuerstellen.

SQL:

CREATE VIEW SCHUELLER/ARBP2L200 AS
select * from(
SELECT *
FROM SCHUELLER/ARBP2P
WHERE FERT1B BETWEEN 680 AND 699 AND BLOCKN <> 0
ORDER BY MDT, BLOCKN, FERT1B, LFDNREH, STKZ2B,
CASE RLB WHEN 'R' THEN '1' WHEN ' ' THEN '2' WHEN 'L' THEN '3' END
) as ARBP2L200


ARBP2P = Physische Datei.
ARBP2L200 = logische Datei die genneriert werden soll.
Die funktioniert auch.
Mein Problem dabei ist das die daraus entstandenen log. Datei keine Keyfelder aufweist bzw. die Sortierung nicht vorhanden ist.

Frage:
Wie kann man Keyfelder angeben oder wie kann ich diese Problemstellung sonst lösen?

mk
10-05-06, 08:24
Hallo,

wenn Du eine Logische Datei mit Schlüsselfeldern benötigtst
dann probiere mal den CREATE INDEX

gruss
Michael

Hubert
10-05-06, 08:26
In einem View kannst du keine Schlüssel angeben, das ist nur im Index möglich.

Fuerchau
10-05-06, 08:45
Eine View hat deswegen keine Schlüssel, da es nur eine spezielle Sicht der Daten ist und später ja mit SQL-Select und eigenem Order-By ausgewertet wird.

Eine Bearbeitung mit RPG/LE ist da wenig sinnvoll.

Mittels "Create Index" kann man nur den Optimizer ggf. beschwichtigen, ein Zugriff über RPG/LE oder Select ist nicht möglich.

Wenn du einen Zugriff aus RPG/LE native benötigst, musst du eine LF erstellen, wobei allerdings die Art der Berechnung (case) dort nicht möglich ist.

Hier hilft ggf. noch ein OPNQRYF mit CPYFRMQRYF.

Kaufmann
10-05-06, 08:46
Dabei habe ich das Problem das ich in der neuen log. Datei den Schlüssel, die Selektion und die Änderung der Sortierreihenfolge für das Feld RLB benötige. Mit CREATE INDEX kann ich aber "nur" die Keydefinition machen.

Wie bewerkstellige mit einem Index die zusätzliche Selektion und Sortierung?

Ist das ganze dann auch mit RUNSQLSTM und einem Soucrefile möglich?

Fuerchau
10-05-06, 08:56
Mit RUNSQLSTM ist kein Select möglich.
Hierfür musst du QM-Query mit Ausgabedatei oder Query mit Ausgabedatei bemühen.

Aber warum immer diese Umwege ?

Die schnellste und einfachste Möglichkeit ist do embedded SQL !
Warum nimmst du nicht einfach diese Möglichkeit ?

Kaufmann
10-05-06, 09:19
Weil ich in der Tabelle keinen Eindeutigen Schlüssel habe und ein Feld bei einem Gruppenwechsel um 1 erhöhen muss. Dan geänderten Wert muss ich dann wieder in die Tabelle schreiben. Wenn ich das ganze über embedded SQL mache kann ich nicht genau auf den zu änderten Satz einen Update machen.
Oder geht das?
Stelle ich mich vielleich nur dumm an?:confused:

Habe auch überlegt ob ich das ganze mit einen ALTSEQ mache. Wobei ich alle Key-Felder bis auf das umzusortierende Feld davon ausnehme(NOALTSEQ)
Dafür bräuchte ich aber die komplette Umsetzung als TBL.

mk
10-05-06, 09:20
Hallo Baldur,

warum sollte ich nicht mit einer "Create Index" Datei
im RPG arbeiten können ?

Oder habe ich das falsch verstanden.

Gruss
Michael


Mittels "Create Index" kann man nur den Optimizer ggf. beschwichtigen, ein Zugriff über RPG/LE oder Select ist nicht möglich.

mk
10-05-06, 09:27
Hallo,

Du kannst im SQL auch mit der Satznumer arbeiten
SELECT H_ART, H_FROMUSER , rrn(mailhp) FROM mailhp WHERE rrn(mailhp) > 1

Vielleicht hilft Dir das

GRUSS
MICHAEL

Fuerchau
10-05-06, 09:50
@MK
Ein Index enthält ausschließlich Schlüsselfelder. Mag Sein, dass der RPG-Compiler das zulässt, aber du musst ja trotzdem noch auf die Daten zugreifen können. Es macht aber wenig Sinn, alle Felder (max. 120) in den Index aufzunehmen.

@Kaufmann
Und es geht doch !
Verwende einfach einen sog. Update-Cursor !

declare cursor mycursor for
select ...
from mytable
where ...
for update [ of f1, f2, ...]

Open
Fetch mycursor into ...

update mytable set f1=...
where current of mycursor