[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    May 2006
    Beiträge
    88

    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?

  2. #2
    Registriert seit
    Jan 2001
    Beiträge
    833
    Hallo,

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

    gruss
    Michael

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    163
    In einem View kannst du keine Schlüssel angeben, das ist nur im Index möglich.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    May 2006
    Beiträge
    88

    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?

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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 ?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    May 2006
    Beiträge
    88

    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.

  8. #8
    Registriert seit
    Jan 2001
    Beiträge
    833
    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.

  9. #9
    Registriert seit
    Jan 2001
    Beiträge
    833
    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

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    @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
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  11. #11
    Registriert seit
    May 2006
    Beiträge
    88

    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

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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 ?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. CREATE VIEW
    By Franz Karl in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 20-01-07, 08:04
  2. create view oder constraint oder trigger oder ... ?
    By antvik in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 02-08-06, 18:04
  3. CREATE SQL FUNCTION
    By Xanas in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 23-02-06, 10:29
  4. SQL VIEW
    By KM in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 12-01-06, 08:52
  5. Create View über 3 Dateien
    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
  •