[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2

Hybrid View

  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    12

    Anderer Vorschlag

    So kann man es auch machen :

    COBOL
    Code:
     identification division.
     program-id. PREPART.
     environment division.
     configuration section.
     special-names.
         decimal-point is comma.
     data division.
     working-storage section.
         EXEC SQL
             include SQLCA
         END-EXEC.
     01  DEFINITIONEN.
    * PREPARE-String
         05  EXECSTRING                    pic x(99).
    * Hier kommen die Felder aus der Datei 1 (Num. Felder GEZONT
    * definieren !)
         05  VARNAME                       pic x(10)
                                            value "LAENGE    ".
         05  WERT                          pic s9(9)
                                            value 1200.
         05  ARTNR                         pic s9(15)
                                            value 4711.
    /
    *****************************************************************
    * Haupsteuerung
    *****************************************************************
     procedure division.
     steuerung.
         perform init.
    * Hier muss eine Schleife 'rein, die die Datei 1 abarbeitet und
    * bei Gruppenwechsel der Artikelnummer einen Satz mit der neuen
    * Artikelnummer (ohne die anderen Feldwerte) in die Datei 2
    * schreibt und ggf. den Update für alle Felder der Datei2 durch-
    * führt.
    * Zusammenbasteln des PREPARE-Strings für alle Felder der Datei 2
         string "update ARTIKEL set " delimited by size,
                VARNAME               delimited by size,
                " = "                 delimited by size,
                WERT                  delimited by size,
                " where ARTNR = "     delimited by size,
                ARTNR                 delimited by size,
             into EXECSTRING
         end-string.
         EXEC SQL
             prepare SETFLD from :EXECSTRING
         END-EXEC.
         EXEC SQL
             execute SETFLD
         END-EXEC.
         goback.
     init.
         initialize SQLCODE,
                    SQLSTATE.
    DDS
    Code:
    A                                      UNIQUE
    A          R ARTIKELREC
    A*
    A            ARTNR         15P 0
    A            LAENGE         9P 0
    A            BREITE         7P 0
    A            HOEHE          5P 0
    A*
    A          K ARTNR
    Hth

    Bernd
    Last edited by bwachs; 24-07-12 at 11:46. Grund: tippfehler

  2. #2
    Registriert seit
    Feb 2003
    Beiträge
    16

    Lösung

    Cobol kann ich leider nicht.

    Ich habe den Vorschlag von Birgitta umgesetzt:

    Code:
                 PGM                                                                                    
    /*         SQL-Statement für View löschen                                                         */
                 CLRPFM     FILE(OWAPF558)                                                              
    /*         View löschen                                                                           */
                 DLTF       FILE(CCMPDTAP/OWALF558)                                                     
                 MONMSG     MSGID(CPF2105)                                                              
    /*         SQL-Statement für View schreiben                                                       */
                 CALL       PGM(OWAPG558)                                                               
    /*         View erstellen                                                                         */
                 OVRPRTF    FILE(QSYSPRT) OUTQ(LOESCH) SPLFOWN(*JOBGRPPRF)                              
                 RUNSQLSTM  SRCFILE(OWAPF558) SRCMBR(OWAPF558) +                                        
                              COMMIT(*NONE)                                                             
                 ENDPGM
    Mit RPG lese ich den Merkmalsstamm und baue folgende SQL-Source zusammen:

    Code:
    CREATE VIEW CCMPDTAP/OWALF558 AS SELECT                            
    SUBSTR(OJKYHJ, 18, 8) AS ARTNR,                                    
    MAX(CASE WHEN FCKYHJ = 'LAENGE' THEN FSN1HJ ELSE 0  END) AS LAENGE,
    MAX(CASE WHEN FCKYHJ = 'BREITE' THEN FSN1HJ ELSE 0  END) AS BREITE,
    MAX(CASE WHEN FCKYHJ = 'DICKE ' THEN FSN1HJ ELSE 0  END) AS DICKE ,
    MAX(CASE WHEN FCKYHJ = 'BAUSTO' THEN FSA1HJ ELSE '' END) AS BAUSTO,
    ...
    MAX(CASE WHEN FCKYHJ = 'NADELA' THEN FSA1HJ ELSE '' END) AS NADELA
    FROM CASPDTAP/CATPF0HJ
    GROUP BY OJKYHJ;
    Das funktioniert so wie es soll!
    Danke

  3. #3
    Registriert seit
    Mar 2012
    Beiträge
    71
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Angenommen die Datei hat 3 Spalten: Artikel-Nr. ArtNr, Merkmal MRK, Wert Wert.
    Dann könnte die View etwa so aussehen:
    Code:
    Create View MySchema/MyView
    as Select ArtNr, Max(Case When MRK = 'LAENGE' Then Wert Else '' End) as Laenge,
                     Max(Case When MRK = 'BREITE' Then Wert Else '' End) as Breite,                 ...
                        From MySchema/MyTable
        Group By ArtNr;
    Wie Birgitta vorgeschlagen. Was musst du tun um das zu automatisieren?

    Erstelle einen Array mit den vorhandenen Merkmalen (%Scan Merkmal: vorhanden ja = nix tun, nicht vorhanden = in's nächste freie Element einfügen (Blank-Scan).

    Aufgrund des Arrays, SQL-Statements wie oben erstellen. Betrifft jetzt nur die Selects, der Rest bleibt ja immer gleich.

    Automatisiert und ohne Handarbeit

Similar Threads

  1. Antworten: 6
    Letzter Beitrag: 26-07-06, 12:22
  2. sql num. Feld formatieren
    By rr2001 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 11-07-06, 14:10
  3. Prüfung, ob Eingabe in Feld
    By M Scheid in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 12-06-06, 13:02
  4. 2 Dimensionales Feld
    By Sulla in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 17-05-06, 16:06
  5. ILE Feld in Feld ansprechen
    By jogisarge in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 10-05-06, 16:26

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •