Die folgende Anweisung ändert nichts in einer Exact Online-Datenbank:
use 90420@eol
set use-http-disk-cache@eol false
set use-http-memory-cache@eol false
create or replace table EmployeesSoll@InMemoryStorage
as
select jte.*
from jsontable
( '[*]'
passing '[{ "id":31870082, "first_name":"yyy"},{ "id":31870282, first_name":"xxx"}]'
columns EmployeeHid number path 'id'
, FirstName varchar2 path 'first_name'
) jte
synchronize EmployeesSoll@InMemoryStorage
to ExactonlineREST..Employees@eol
with insert or update
identified by EmployeeHID
triggers
instead of insert
begin
dbms_output.put_line('Insert: ' || dbms_sync.diff(:old, :new));
insert into ExactOnlineREST..Employees@eol
( EmployeeHID
, FirstName
)
values
( :new.EmployeeHID
, :new.FirstName
);
exception
when others
then
dbms_output.put_line('Fehler beim Einfügen des Mitarbeiters auf ' || :new.EmployeeHId || ' aufgrund von ' || sqlerrm);
raise;
end
instead of update
begin
dbms_output.put_line('Update: ' || dbms_sync.diff(:old, :new));
update ExactOnlineREST..Employees@eol
set FirstName = :new.FirstName
where EmployeeHID = :old.EmployeeHID
;
exception
when others
then
dbms_output.put_line('Fehler beim Aktualisieren des Mitarbeiters auf ' || :new.EmployeeHId || ' aufgrund von ' || sqlerrm);
raise;
end
Es wird kein Fehler angezeigt. Die Zählung und die Protokollierung zeigen, dass tatsächlich 2 Zeilen aktualisiert wurden.
Die folgende Abfrage zu den tatsächlichen API-Aufrufen gibt eine 403 Forbidden mit der Meldung itgenclr217 zurück:
select *
from sessionios@DataDictionary
order
by id desc
Aber bei der Synchronisation tritt kein Fehler auf.
Im folgenden SQL:
update exactonlinerest..employees
set firstname='FirstName'
where employeehid=53
hat die Aktualisierung keine Wirkung. SessionIOs zeigt ein itgenclr217, aber es wird kein Fehler ausgelöst.
Die Tabelle hat can_insert = true und die Spalte hat influences_insert = true in den Tabellen SystemTables@DataDictionary bzw. SystemTableColumns@DataDictionary.
Eine Analyse des nativen Anrufprotokolls zeigt, dass ein HTTP PUT an Exact Online unter der URL gesendet wird:
https://start.exactonline.de/api/v1/90420/payroll/Employees(guid'4662acaf-d235-4e82-9c37-da1207814736')
mit der Nutzlast:
{"FirstName":"FirstName"}
und Ergebnis:
{"error": {"code": "", "message": {"lang": "", "value": "Forbidden"}}}
Erwartungen:
- Es wird ein Fehler angezeigt, da es fehlgeschlagen ist,
- und es sollte die Daten tatsächlich aktualisieren, wenn es nicht fehlgeschlagen ist.