Het volgende script is een voorbeeld om relatiecodes in Exact Online massaal bij te werken. Maak altijd VOORAF een backup en test het uitgebreid op een kopie vooraf.
Looptijd is circa 300 ms per bijgewerkte relatie in Exact Online.
local remark Source file in some arbitrary CSV format.
local remark In this case: human company number, old number, name, some audit, new number.
local define CSV_FILE "c:\temp\omnummeringtabel.csv"
--
-- Create a table mapping old account numbers of an
-- Exact Online company to a new (non-used) account number.
--
create or replace table mapping@inmemorystorage
as
select sdn.code division_code
, csv.*
from read_file_text('${CSV_FILE}')@Os rft
join csvtable
( passing rft.file_contents
column delimiter ';'
skip lines 0 /* There is no header row. Change to 1 when there is a header row. */
columns adm_nummer integer position 1 /* Use "next" instead of 1,2,3 on v20.1 */
, oud_nummer varchar2 position 2
, naam varchar2 position 3
, datum_aangemaakt datetime position 4
, aangemaakt_door varchar2 position 5
, nieuw_nummer varchar2 position 6
)
csv
join systemdivisions sdn
on sdn.hid = csv.adm_nummer
begin
--
-- Select all companies which have an account to be remapped.
--
use select distinct division_code from mapping@inmemorystorage;
--
-- One-by-one update the accounts.
--
-- Precondition: the new numbers are not in use as an old number.
--
for r in
( select *
from MAPPING@InMemoryStorage mpg
order
by mpg.division_code
, mpg.oud_nummer
)
loop
update ExactOnlineREST..Accounts
set code = to_char(r.nieuw_nummer)
where code = to_char(r.oud_nummer)
and division = r.division_code
and r.nieuw_nummer != r.oud_nummer
;
if sqlrowcount = 0
then
raise_application_error
( -20163
, 'Could not update account from '
|| to_char(r.oud_nummer)
|| ' to '
|| to_char(r.nieuw_nummer)
|| ' in division '
|| to_char(r.division_code)
|| ' because the old number does not exist.'
);
end if;
end loop;
end;
Een bijpassend CSV-bestand ziet er als volgt uit:
199;300005912;;;;400005912
199;300005911;;;;400005911
waarbij in de eerste kolom het administratienummer staat zoals linksboven in Exact Online getoond wordt. De divisioncode
wordt er automatisch bijgezocht door de join op SystemDivisions
.
Een bijpassend CSV-bestand met kopregel ziet er als volgt uit:
adm_nummer;oud_nummer;;;;nieuw_nummer
199;300005912;;;;400005912
199;300005911;;;;400005911
Een CSV-bestand met kopregel werkt alleen als de skip lines 0
in skip lines 1
veranderd wordt: de CSV-kopregel voor het omnummeren moet overgeslagen worden.