-
Einzelne Sätze aus PF löschen
Hallo zusammen,
ich habe einen Spoolfile den ich eins zu eins in eine Physische Datei einlesen. Anschließende lese ich mittels RCVF in einem CL die einzelne Sätze und Prüfe gewisse stellen.
Mit welchem Befehl kann ich die einzelnen Sätze löschen (falls mein Kriterium zutrifft)?
Danke und Grüße
-
Welches Release hast Du denn?
In den aktuellen ist es wohl möglich mittels CL Sätze zu löschen so wenn sie denn einen Schlüssel haben. Müßte ich aber nochmals nachlesen.
GG
-
Hallo,
Release Stand ist V7R1M0
-
Da eine PF als "relative" Tabelle über ihre Satznummer ansprechbar ist, kann man den Delete auch auf die Satznummer durchführen.
In CLP geht das wohl eher nicht, aber was spricht gegen ein kleines RPG/LE?
Der DELETE ohne Angaben nimmt den gerade gelesenen Satz, ein Delete mit einer Satz-Nr. als "Schlüsselfeld" löscht den Satz, also nicht anders wie mit keyed PF's.
-
Der DELETE ohne Angaben nimmt den gerade gelesenen Satz,
Das würde ich lieber nicht probieren! Delete Ohne Angabe löscht die komplette Datei, d.h. ALLE Datensätze!
Wenn über Cursor der aktuelle Satz gelöscht werden soll, muss beim Delete auf alle Fälle WHERE CURRENT OF angegeben werden.
Im CLLE (CLP is OPM und veraltet!) kann auch über RUNSQL ein Delete ausgeführt werden, die relative Satz-Nr. oder der eindeutige Schlüssel sollte jedoch auch dabei angegeben werden, um den richtigen Satz zu löschen.
Birgitta
-
Ich sprach nicht von einem SQLRPGLE sondern nur von einem simplen RPGLE.
Hier definiert der Delete schon immer nur einen speziellen Satz.
Bei SQL hast du natürlich recht, aber warum soll ich bei so trivialen Anforderungen immer gleich SQL nehmen.
-
Hi,
hier mal ein etwas "verrückter" und anderer Vorschlag :-)
Man braucht : 2 Physische Dateien 132 Länge, aufgeteilt ins 132 Felder (ein Byte). Wenn das Vergleichsfeld mehr Byte hat dann entsprechend anpassen.
Ein CL :-)
1. Cpysplf in die 1. Physische Datei.
2. cpyf mit %ne 1. Bedingung in die 2. Physische Datei
3. cpyf mit %ne 2. Bedingung von 2. physischer Datei in die 1. Physische Datei
4. cpyf mit %ne 3. Bedingung von 1. physischer Datei in die 2. Physische Datei
5. cpyf mit %ne 4. Bedingung von 2. physischer Datei in die 1. Physische Datei
Same procedure so lange Bedingungen vorhanden sind.
Wenn alle Bedingungen abgearbeitet sind dann ein letzer cpyf in eine Ergebniss Datei welche
auch wieder 132 Byte hat ...
Übrig bleibt dann irdgendwann das Ergebniss. :-)
Und falls es irgendwann zu einem cypf mit 0 Datensätzen kommt dann per monmsg abfangen, die andere Datei löschen ...
Gruß,
Ralf
-
Laut Doku geht mit dem aktuellen Release einiges:
Code:
/* If no record has matching key, write a new record */
IF COND(&NUM_BYTES *EQ 0) THEN(DO)
CHGVAR VAR(&DATA) VALUE(&DATAIN)
CHGVAR VAR(&MOREDATA) VALUE(' ')
CALLPRC PRC('_Rwrite') +
PARM((&RFILE *BYVAL) (&RECORD) (&RECORDSIZE *BYVAL)) +
RTNVAL(&FEEDBACK)
ENDDO
/* Record was read successfully, update the existing record */
ELSE (DO)
CHGVAR VAR(&DATA) VALUE(&DATAIN)
CALLPRC PRC('_Rupdate') +
PARM((&RFILE *BYVAL) (&RECORD) (&RECORDSIZE *BYVAL)) +
RTNVAL(&FEEDBACK)
ENDDO
Vermutlich daher auch löschen, habe es mir aber nicht genauer angesehen
GG
-
Wofür die 132 Felder?
Hier wurde ja nach dem Delete gefragt.
Mit 2 PF's habe ich es auch schon gemacht.
Dies kann man natürlich auch tun.
Dazu eine numerische Variable definieren und beim RCVF die Sätze zählen.
Somit hat man gleich die relative Satznummer.
Dann je gültiger Bedingung macht man einen CPYF ... FROMRCD(&MyRcdNr) NBRRCDS(1).
Wenn ungültig, lässt man den CPYF einfach weg.
Für das RPG/LE-Delete kann man sich auch ein Kommando schreiben, dass auf jeder beliebigen PF einen Satz per Satz-Nummer löscht. Hierzu definiert man sich im RPG eine interne PF, überschreibt diese mit LVLCHK(*NO) und macht nur einen "SATZNR DELET MYFILE" und beendet das Programm mit *LR=*ON.
-
Wahrscheinlich wird es noch ein paar weitere Lösungen geben.
Du kannst auch (wie Birgitta ja vorgschalgen hat) einfache einen SQL stricken:
chgvar &MYSQL ('DELETE MYTABLE A WHERE RRN(A) = ' *CAT &MYRRN)
RUNSQL &SQL(&MYSQL)
-
Hi,
Zitat von Fuerchau
Wofür die 132 Felder?
Hier wurde ja nach dem Delete gefragt.
Mit 2 PF's habe ich es auch schon gemacht.
Dies kann man natürlich auch tun.
Dazu eine numerische Variable definieren und beim RCVF die Sätze zählen.
Somit hat man gleich die relative Satznummer.
Dann je gültiger Bedingung macht man einen CPYF ... FROMRCD(&MyRcdNr) NBRRCDS(1).
Wenn ungültig, lässt man den CPYF einfach weg.
Für das RPG/LE-Delete kann man sich auch ein Kommando schreiben, dass auf jeder beliebigen PF einen Satz per Satz-Nummer löscht. Hierzu definiert man sich im RPG eine interne PF, überschreibt diese mit LVLCHK(*NO) und macht nur einen "SATZNR DELET MYFILE" und beendet das Programm mit *LR=*ON.
Naja der Fragende hat ja auch nach der Möglichkeit gefragt aufgrund von gewissen Inhalten an gewissen Stellen entsprechend zu reagieren. Deshalb die 132 einzelnen Felder. Wobei hier naturlemant geguckt werden muss ob die Bedingung sich auf Spaltenbreit 1 oder groesser bezieht und die Datenstruktur dann entsprechend angepasst werden müßte.
Die Lösung war auch eher dahingehend angesiedelt mit den in CL zur Verfügung stehendem Befehlssatz das Problem auch zu lösen ... und wie immer gitl "Alle Wege führen irgendwann überallt hin :-"
Gruß aus Flensburg
Ralf
-
Hallo nochmal,
vielen Dank für die zahlreichen Lösungsvorschläge.
Einfachste Lösung erschien mir dann doch ein kleines RPG zu schreiben. Läuft auch.
Grüße :-)
Similar Threads
-
By programmer400 in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 06-06-16, 20:45
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 30-12-14, 19:53
-
By Peet in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 29-10-14, 08:05
-
By Schnichels in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 23-11-01, 12:54
-
By Wirnitzer in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 07-08-01, 19:59
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