PDA

View Full Version : Insert BLOB im Servicepgm



mk
26-10-19, 16:03
Hallo zusammen,

ein Programm soll ein Service aufrufen in dem ein Insert mit einem BLOB Feld
gemacht werden soll.
Service:

exec sql
insert into VISITRD05P
(DID, DOCUMENT, DOCUMENTDATE, DOCUMENTTEXT, DOCUMENTUSER, CHANGETIME, CHANGEUSER )
OVERRIDING USER VALUE
values(:DBInsertVISITRD05P.DID,
:DBInsertVISITRD05P.DOCUMENT ,
:DBInsertVISITRD05P.DOCUMENTDATE,
:DBInsertVISITRD05P.DOCUMENTTEXT,
:DBInsertVISITRD05P.DOCUMENTUSER,
current timestamp ,
:PgmUser
);

Die Fehlermeldung ist

SQL0312: Position 40 Variable DOCUMENT nicht definiert oder nicht verwendbar. Reason: No declaration for the variable exists, the declaration is not within the current scope, or the variable does not have an equivalent SQL data type.

Das Feld DOCUMENT ist als BLOB Feld in der Tabelle definiert.

Der Satz der Tabelle wird über eine DS an den Service geliefert


dcl-ds DBInsertVISITRD05P extname('VISITRD05P') qualified alias;
end-ds;




Hat jemand eine Idee wie ich ein BLOB in den Service übergeben kann ?
Gruß
Michael

Fuerchau
26-10-19, 17:31
Schau dir erst mal die Spoolauflösung des BLOB's an.
Möglicherweise wird der Typ BLOB ignoriert und muss manuell definiert werden.

dschroeder
29-10-19, 14:47
Ein Blob kann nicht mittels einer extern definierten Datenstruktur zwischen Programmen übertragen werden. Der Blob ist ja kein Datentyp, mit dem RPG zurechtkommt. Als Feld wird man in der Datenstruktur nur einen Pointer sehen, aber nicht den eigentlichen Wert des Blobs.

Die Frage ist, wo dein Blob bisher gespeichert ist. Wahrscheinlich in einer Tabelle. Du könntest dem Service dann den Namen der Tabelle und den Namen des Blobfeldes und den Schlüssel der Tabelle usw. übergeben und der Service könnte sich dann ein dynamisches SQL-Statement zusammenbauen und den Blob selber lesen und bei sich speichern.

Ich fürchte, du kannst nur mit SQL Mitteln Blobs verarbeiten!

Dieter

Fuerchau
30-10-19, 08:59
Man muss eine manuelle DS definieren. Hier kann man dann den BLOB als SQLTYPE(BLOB) definieren.
Die Länge des BLOB ist dann allerdings auf 16MB minus dem Rest der Felder beschränkt, da die DS 16MB nicht übersteigen kann.
Will man größere Werte verarzten kann man nur noch mit LOB-Locatoren arbeiten.
Die klassische Externe DS entfällt dann natürlich.