-
SQL -> CREATE VIEW
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?
-
Hallo,
wenn Du eine Logische Datei mit Schlüsselfeldern benötigtst
dann probiere mal den CREATE INDEX
gruss
Michael
-
In einem View kannst du keine Schlüssel angeben, das ist nur im Index möglich.
-
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.
-
Problem dabei
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?
-
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 ?
-
Grund
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?
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.
-
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.
-
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
-
@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
-
Irgendwas mache ich noch falsch
Das Programm wird als Modul gewandelt.
Ich habe eine eigene Prozedur zum Testen des SQL angelegt. Diese sieht so aus:
//-------------------------------------------------------------------------------------------
// GetBLFOLGE2 : BLFOLGE aus Parameterdatei lesen
// IN : pMdt - Mandant
// RESULT : true = erfolgreich, false = nicht gefunden
// FILE : -
//-------------------------------------------------------------------------------------------
P GetBLFOLGE2 B
D GetBLFOLGE2 PI 1N
D pMdt CONST like(FRD1.MDT)
//--------------------
// Lokale Variablen
//--------------------
D vBlFolge S like(FRD1.BLFOLGE) inz
//--------------------
//
C*-----------------------------
C* DEKLARATION 1 --------------
‚C/EXEC SQL
‚C+ DECLARE CURSOR MYCURSOR FOR
C+ SELECT BLFOLGE FROM SCHUELLER/ARBP2P
C+ WHERE FERT1B BETWEEN 680 AND 699 AND BLOCKN <> 0
C+ ORDER BY MDT, BLOCKN, FERT1B, LFDNREH, STKZ2B,
C+ CASE RLB WHEN 'R' THEN '1' WHEN ' ' THEN '2' WHEN 'L' THEN '3' END
C+ FOR UPDATE [ OF BLFOLGE ]
‚C/END-EXEC
šC/EXEC SQL OPEN MYCURSOR
‚C/END-EXEC
C*-----------------------------
‚C SQLCOD DOUNE 0
C*-----------------------------
‚C/EXEC SQL
ˆC+ FETCH MYCURSOR INTO :vBLFOLGE
šC/END-EXEC
C*-----------------------------
C ENDDO
C*-----------------------------
C/EXEC SQL CLOSE MYCURSOR
C/END-EXEC
C*-----------------------------
/FREE
return;
/END-FREE
P GetBLFOLGE2 E
Versuche ich das Programm mit CRTSQLRPGI zu wandeln bekomme ich diese Fehlermeldungen:
Satz *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 FLGNR. Letzte Änderung Kommentare
2424 C+ DECLARE CURSOR MYCURSOR FOR 16506 10.05.06
2431 C/EXEC SQL OPEN MYCURSOR 16516 10.05.06
2437 C+ FETCH MYCURSOR INTO :vBLFOLGE 16522 10.05.06
2442 C/EXEC SQL CLOSE MYCURSOR 16527 10.05.06
5722ST1 V5R2M0 020719 SQL-ILE-RPG-Objekt erstellen NACHT547 10.05.06 13:09:45 Seite
DIAGNOSENACHRICHTEN
MSG ID WTK SATZ TEXT
SQL0104 30 2424 Position 24 Token MYCURSOR ungültig. Gültige Token:
STATEMENT.
SQL0199 30 2424 Position 33 Schlüsselwort FOR nicht erwartet. Gültige
Token: <ENDE DER ANWEISUNG>.
SQL0504 35 2431 Position 22 Cursor MYCURSOR nicht deklariert.
SQL0504 35 2437 Position 15 Cursor MYCURSOR nicht deklariert.
SQL0312 30 2437 Position 30 Variable VBLFOLGE nicht definiert oder nicht
verwendbar.
SQL0504 35 2442 Position 23 Cursor MYCURSOR nicht deklariert.
Nachrichtenzusammenfassung
Total Info Warnung Fehler Wertigk. Beendigung
Was mache ich falsch?
Sorry das ich immer noch nerve!!
Habe keine große Erfahrung mit SQL in RPG-Sourcen
-
Die eckige Klammer darf nicht angegeben werden. Sie diente nur zur Syntaxerklärung, dass diese Angabe optional ist.
Werden Felder in "for update of f1, f2, ..." benannt, können nur diese in einer späteren "Update ... current of .." verändert werden.
Ansonsten:
Bist du sicher, dass du nur 1 Zeile verarbeiten musst ?
Similar Threads
-
By Franz Karl in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 20-01-07, 08:04
-
By antvik in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 02-08-06, 18:04
-
By Xanas in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 23-02-06, 10:29
-
By KM in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 12-01-06, 08:52
-
By Mädele in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 24-08-05, 12:26
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks