-
Es gibt auch die Möglichkeit des DESCRIPTOR.
Da kannst du völlig dynamisch dein SQL zusammenbasteln und einlesen.
Das Einlesen einzelner Werte würde wie folgt aussehen:
Code:
...
if vresult_ind >= 0;
Select;
When vtype = '1';
// Character
exec Sql GET DESCRIPTOR 'mydesc' VALUE :i :sp2 = DATA;
When vtype = '4';
// Integer
exec Sql GET DESCRIPTOR 'mydesc' VALUE :i :sp1 = DATA;
endsl;
endif;
Damit brauchst du die Spalten nicht alle Definieren, du musst halt nur aufpassen dass du für jedes Feld eine passende Variable zur Verfügung hast.
lg Andreas
-
Ich denke nicht dass die SQL-Vorschläge hier helfen, da das After/Bevor-Image wohl nicht als Einzelsatz in einer Tabelle sondern als Gesamtpuffer von einem Trigger irgendwo gespeichert ist.
Hier müsste ich ein neues Konzept erstellen und somit eine neue Tabelle (auf Basis der alten + Identity-Bezug mit B/A-Kennzeichnung) erstellen und ein feldbezogenes After/Bevor-Image per Trigger schreiben.
Dann kann ich per dynamischem SQL die Felder vergleichen und für eine Subfile-Ausgabe auch mittels CHAR(NumFeld) einfach aufbereiten.
-
Um überhaupt mit Descriptoren zu arbeiten musst du diese auch erstellen, automatisch steht da nichts zur Verfügung.
Beispiele stehen im Handbuch SQL-Programming.
Im wesentlichen sind dies:
Allocate descriptor ...
Describe xxx using descriptor ...
fetch ... into descriptor ...
Dann kannst du auch per "Get Descriptor ... DATA" den Inhalt (sowie Attribute usw.) auslesen.
Benötigt wird hierfür aber ein dynamischer SQL auf Feldebene!
-
... ums noch genauer zu beschreiben:
var = 'select ...'
prepare s1 from :var
decalare c1 cursor for s1
allocate descriptor 'xxx' ...
describe s1 using descriptor 'xxx'
open c1
fetch c1 into sql descriptor 'xxx'
// anzahl der spalten abrufen
get descriptor 'xxx' :count = count
dann in einer Schleife für jede Spalte (i = Spaltennummer):
get descriptor 'xxx' value :i :type=type, ...
und dann wie oben von mir schon beschrieben mit
get descriptor 'xxx' value :i :vdata = data
-
Manchmal frage ich mich, warum immer alles so kompliziert sein muss.
Mit einer dynamischen SQLDA bekomme ich auch alle Informationen sowie beim Fetch auch gleich die Inhalte. Durch Typanpassung kann ich immer ein CHAR/VARCHAR-Feld als Ziel angeben.
Ich muss nur halt die SQLDA per %alloc() anlegen, im Array der SQLItem's je Variable einen %alloc() für einen Speicherbeireich durchführen.
Wenn ich dann fertig bin, kann ich alles per %free() wieder freigeben.
Descriptoren machen eigentlich nur bei Sprachen Sinn, die keine dynamische SQLDA unterstützen.
Mit V4R3 habe ich einen SQLCPY entwickelt (in meinem Download zum Test verfügbar), der genau nach diesem Verfahren arbeitet.
Similar Threads
-
By oulbrich in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 02-04-14, 11:05
-
By Robi in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 21-03-03, 09:16
-
By DEVJO in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 06-03-03, 11:35
-
By Henrik Motzkus in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 05-03-02, 09:13
-
By hpw in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 15-10-01, 13:23
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