-
Sfl-Satz löschen, declare global temporary table im SQL
Hallo,
ich möchte einen Datensatz in einer Subfile löschen bzw. auch an bestimmter Stelle in die Sfl einfügen. Da delete auf einer Sfl nicht zulässig ist, bleibt mir wohl nichts anderes übrig, als die Sfl komplett zu sichern, dann zu leeren und dann neu aus der Sicherung zu füllen (natürlich dann ohne den zu löschenden Satz).
Ich habe eben gesehen, dass es in SQL die Möglichkeit gibt, eine sogenannte temporary table zu erzeugen. Sieht für mich so aus, als wäre das einfach eine Tabelle in der QTEMP. Im Handbuch steht, eine solche Tabelle würde für den "current application process" gelten. Was soll das sein? Ist das der Job? Ich benötige die Tabelle nicht global in meinem Job, sondern nur für mein Programm. Muss ich die Tabelle dann bei Programmeende wieder aufräumen?
Gibt es überhaupt einen Vorteil gegenüber einer "manuell" in der Qtemp erzeugten Tabelle?
Dieter
-
Ich löse sowas in der Regel über programminterne Datenstrukturen. Ist performanter und du kannst bei richtiger Definition sogar das SFL dann nach jedem Feld sortieren, löschen ....
So z.B.
Code:
D DS
D ZDSFL 190 DIM(9999)
D ZDFLD1 2 OVERLAY(ZDSFL:*NEXT) INZ(*HIVAL)
D ZDFLD2 6 OVERLAY(ZDSFL:*NEXT) INZ(*HIVAL)
D ZDFLD3 6 OVERLAY(ZDSFL:*NEXT) INZ(*HIVAL)
D ZDFLD4 9 0 OVERLAY(ZDSFL:*NEXT) INZ(*HIVAL)
Dann kannst du SORTA ZDFLD2 machen und Zack wäre das SFL sortiert nach der 2 Spalte...
Also lesen per SQL/READ und füllen der DS und die DS Seitenweise /Komplett ins SFL stellen..
-
Vielen Dank. Das habe ich früher auch so gemacht. Aber unsere Subfiles sind grafische Anwendungen (realisiert über ProfoundUI). Technisch verhalten sie sich fast wie normale Subfiles. Profound unterstützt lange Feldnamen. Deshalb lesen wir Bildschirmdaten in Record-Datenstrukturen ein:
// Qualifizierte Datenstrukturen für Bildschirm-Handling:
dcl-ds f1 likerec(bvsjse1d.fmt1:*all); // Alle Felder des normalen Formates
dcl-ds s1 likerec(bvsjse1d.sfl1:*all); // Alle Felder von sfl1
Das heißt, der Zugriff auf einen SFL-Satz sieht folgendermaßen aus:
chain i bvsjse1d.sfl1 s1;
Dabei wird der gesamte SFL-Satz in die Struktur s1 übertragen. Ich möchte genau diese Struktur sichern und nicht alle Felder einzeln.
Deshalb dachte ich an folgende Tempdatei.
// Tempdatei erzeugen / überschreiben:
exec sql declare global temporary table sfl1temp
(tmp_satznr decimal(5),
tmp_daten char(32000)
) with replace;
(Sortierungen kann der User direkt durch Anklicken auf eine Spalte durchführen. Das müssen wir gar nicht programmieren.)
Nochmal meine Frage: Welchen Scope hat so eine Tempdatei? Muss ich sie nach Programmende selber aufräumen? Gibt es überhaupt einen Unterschied zu einer "manuell" erstellten Datei in QTEMP?
Dieter
-
Global Temporary Tables sind Tabellen die auf Job-Ebene (deshalb global!) gelten und nicht nur auf Programm-Ebene.
Im Prinzip nichts anderes als eine Tabelle in der QTEMP, nur halt in der "SQL"-Welt. Im SQL-Standard ist die QTEMP unbekannt. Global Temporary Tables werden mit SESSION qualifiziert.
Der Unterschied liegt m.E. nur darin, dass beim Erstellen von Global Temporary Tables nicht versucht wird die Tabelle in irgendeinem Journal zu registrieren.
Birgitta
-
Vielen Dank Birgitta. Genauso habe ich es mir gedacht (bzw. befürchtet). Nochmal eine kurze Frage: Ich versuche gerade, eine mit likerec deklarierte Struktur in einen langen String zu schieben:
dcl-f bvsjse1d workstn handler('PROFOUNDUI(HANDLER)') alias qualified
sfile(sfl1:f1.s1_satznr);
dcl-ds s1 likerec(bvsjse1d.sfl1:*all); // Alle Felder von sfl1
dcl-s daten char(32000);
daten = s1;
Es sieht für mich so aus, als würde nur das erste Unterfeld von s1 übertragen.
Muss ich extra eine weitere Struktur definieren, in der ich s1 als Unterfeld habe?
Dieter
-
Warum machst du es nicht so...
Code:
dcl-ds s1 likerec(bvsjse1d.sfl1:*all); // Alle Felder von sfl1
dcl-ds save1 likerec(bvsjse1d.sfl1:*all);
save1 = s1;
-
Zitat von ExAzubi
Warum machst du es nicht so...
Code:
dcl-ds s1 likerec(bvsjse1d.sfl1:*all); // Alle Felder von sfl1
dcl-ds save1 likerec(bvsjse1d.sfl1:*all);
save1 = s1;
Weil save1 in ein Datenbankfeld in meiner temporären Tabelle geschoben werden muss. Ich will mir ja gerade ersparen, alle SFL-Felder einzeln in einer Datenbanktabelle zu definieren. Ich möchte stattdessen, den gesamten Datensatz aus der Subfile in einem langen Feld der Datenbanktabelle speichern. Wenn ich das so definiere, wie du vorschlägst, haben ich ja wieder eine (qualifizierte) Struktur.
Dieter
-
Im Moment komme ich nicht so recht weiter. Mein Problem lässt sich jetzt auf folgende Fragestellung reduzieren:
Ich habe eine qualifizierte Datenstruktur s1. Diese möchte ich "am Stück" in ein langes Stringfeld schieben. Weiß jemand, wie das im free format geht?
Dieter
-
Sorry Fehler meinerseits...
Um zwei qualifizierte Datenstrukturen "gleichzusetzen" kann du den Befehl "eval-corr" benutzen
Sollte eigentlich für deine zwecke zu gebrauchen sein
Hier der Link zur Beschreibung
http://www-01.ibm.com/support/knowle...0925086758.htm
-
Zitat von ExAzubi
Nein, leider nicht. Ich will ja gerade NICHT 2 qualifizierte Datenstrukturen gleichsetzen. Ich will eine qualifizierte Datenstruktur in ein Alphafeld char(32000) schieben!
Dieter
-
So, ich konnte mein Problem jetzt folgendermaßen lösen:
dcl-ds datenDS;
tempStr char(32000) pos(1);
tempDS like(s1) pos(1);
end-ds;
chain i bvsjse1d.sfl1 s1;
tempDS = s1;
==> Danach steht in tempStr der volle String mit allen Daten von s1.
Danke an alle für die Tipps.
Dieter
Similar Threads
-
By malzusrex in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 20-11-14, 14:47
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 40
Letzter Beitrag: 03-11-14, 09:15
-
By mk in forum NEWSboard Programmierung
Antworten: 20
Letzter Beitrag: 16-12-13, 12:11
-
By JonnyRico in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 02-04-03, 15:52
-
By Fertig in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 21-02-03, 11:28
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