Daten in andere Datenbank einfügen
Verfasst: Mo 6. Aug 2018, 12:38
Hallo Zusammen,
ich habe ein spezielles Problem:
Eine Datenbank mit sog. Stammdaten;
Weitere Datenbanken die auf die Stammdaten verweisen.
Die Synchronisierung ist nicht das Problem.
Ich habe bisher neue Datensätze von außerhalb der Datenbanken eingefügt.
Nun soll eine Procedure dies tun.
Klappt auch gut; nur wenn ich den Insert-String als Eingabeparameter übergebe erhalte ich Fehlermeldung = Column unknown für die Daten die ebenfalls als Eingabeparameter übergeben werden. Das Mapping (Values :a, :b, :c) (a := :eingabeparama, b := :eingabeparamb, c := :eingabeparamc) wird als Eingabeparameter ignoriert. Auch Versuche dies in Hochkommas oder Anführungszeichen zu stellen haben nicht funktioniert. Der Eingabeparameter für den Datenbanknamen funktioniert.
Hier der Auszug:
RECREATE PROCEDURE SP_KOMM_NEU (
AAGSNAME VARCHAR(20),
AADRID INTEGER,
AAGSART INTEGER,
AGREMKENNUNG INTEGER,
AMITSD BOOLEAN,
AZUSATZDB VARCHAR(20),
AINSERTSTRING VARCHAR(250),
APARAMSTRING VARCHAR(100))
RETURNS (
AKOMMID INTEGER)
AS
BEGIN
/* Procedure text */
/* Daten in eine Tabelle der Datenbank */
insert into TABELLE
(felda, feldb, feldc, feldd)
values (:aagsname, :aadrid, :aagsart, :agremkennung)
returning ags_id into :akommid;
if (:amitsd) then
begin
/* Daten in eine Tabelle einer fremden Datenbank */
execute statement ('insert into tabelle (felda, feldb, feldc)
values (:a, :b, :c)') (a := :aagsname, b := :akommid, c := :aagsart)
with autonomous transaction
on external data source (:azusatzdb)
with caller privileges;
end
suspend;
END^
Wenn ich die Zeile execute Statement
ersetze durch: execute Statement (:ainsertstring) (:aparamstring)
ergibt die Fehlermeldungen. Auch der Versuch, beides in einen Eingabeparamter zu packen hat nicht funktioniert.
Im Programmcode sind Konstanten eingerichtet:
cstrinsert = 'insert into tabelle(felda, feldb, feldc) ' +
'values (:a, :b, :c)';
cstrparam = 'a := :aagsname, b := :akommid, c := :aagsart';
Viellicht hat jemand eine Idee dazu?
Vielen Dank schon mal.
ich habe ein spezielles Problem:
Eine Datenbank mit sog. Stammdaten;
Weitere Datenbanken die auf die Stammdaten verweisen.
Die Synchronisierung ist nicht das Problem.
Ich habe bisher neue Datensätze von außerhalb der Datenbanken eingefügt.
Nun soll eine Procedure dies tun.
Klappt auch gut; nur wenn ich den Insert-String als Eingabeparameter übergebe erhalte ich Fehlermeldung = Column unknown für die Daten die ebenfalls als Eingabeparameter übergeben werden. Das Mapping (Values :a, :b, :c) (a := :eingabeparama, b := :eingabeparamb, c := :eingabeparamc) wird als Eingabeparameter ignoriert. Auch Versuche dies in Hochkommas oder Anführungszeichen zu stellen haben nicht funktioniert. Der Eingabeparameter für den Datenbanknamen funktioniert.
Hier der Auszug:
RECREATE PROCEDURE SP_KOMM_NEU (
AAGSNAME VARCHAR(20),
AADRID INTEGER,
AAGSART INTEGER,
AGREMKENNUNG INTEGER,
AMITSD BOOLEAN,
AZUSATZDB VARCHAR(20),
AINSERTSTRING VARCHAR(250),
APARAMSTRING VARCHAR(100))
RETURNS (
AKOMMID INTEGER)
AS
BEGIN
/* Procedure text */
/* Daten in eine Tabelle der Datenbank */
insert into TABELLE
(felda, feldb, feldc, feldd)
values (:aagsname, :aadrid, :aagsart, :agremkennung)
returning ags_id into :akommid;
if (:amitsd) then
begin
/* Daten in eine Tabelle einer fremden Datenbank */
execute statement ('insert into tabelle (felda, feldb, feldc)
values (:a, :b, :c)') (a := :aagsname, b := :akommid, c := :aagsart)
with autonomous transaction
on external data source (:azusatzdb)
with caller privileges;
end
suspend;
END^
Wenn ich die Zeile execute Statement
ersetze durch: execute Statement (:ainsertstring) (:aparamstring)
ergibt die Fehlermeldungen. Auch der Versuch, beides in einen Eingabeparamter zu packen hat nicht funktioniert.
Im Programmcode sind Konstanten eingerichtet:
cstrinsert = 'insert into tabelle(felda, feldb, feldc) ' +
'values (:a, :b, :c)';
cstrparam = 'a := :aagsname, b := :akommid, c := :aagsart';
Viellicht hat jemand eine Idee dazu?
Vielen Dank schon mal.