-
Warum der Aufwand?
Du must das SQL Script für die erste Erstellung (manuell) eintippen, z.B. in STRSQL, in System i Navigator - Eine Prozedur ausführen oder in eine Quellen-Teildatei eintragen.
Sobald die View (oder Tabelle) einmal erstellt ist kann mit dem Sysem i Navigator - Datenbank die Quelle (IFS-Datei oder Quellen-Teildatei) erzeugt werden. Alternativ kann man auch das API QSQGNDDL verwenden, um den SQL Code zu erzeugen und speichern.
Ein in einer Teildatei oder IFS-Datei hinterlegter SQL-Code kann mit dem CL-Befehl RUNSQLSTM ausgeführt werden.
Ändert sich also die View, d.h. es werden neue Merkmale hinzugefügt, wird halt das Skript um die neuen Merkmale erweitert, die View gelöscht (kann ebenfalls in dem SQL Skript hinterlegt werden) und erneut erstellt.
Birgitta
-
Das Script um die neuen Merkmale erweitern müßte ich dann aber manuell machen, oder?
Deswegen will ich täglich automatisch den Merkmalsstamm lesen und damit das SQL bei Bedarf erweitern.
-
Wenn ich richtig gelesen habe, geht es hauptsächlich nur um eine EXCEL-Tabelle.
Da wäre die billigste Lösung eigentlich eine simple PIVOT-Tabelle
lg
alfredo
-
 Zitat von B.Hauser
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
-
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
-
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
Similar Threads
-
By c.b. in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 26-07-06, 12:22
-
By rr2001 in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 11-07-06, 14:10
-
By M Scheid in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 12-06-06, 13:02
-
By Sulla in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 17-05-06, 16:06
-
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
-
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