Exact Online kostenplaatsen verwijderen massaal

We hebben vanuit de historie enkele honderden kostenplaatsen die we niet gebruiken en zelfs niet representatief zijn, vanwege een bewuste workaround uit het verleden. Maar die (b)lijk je niet in bulk te kunnen verwijderen… Is dit via de API middels SQL te doen waarbij we alle kostenplaatsen bestaande uit een code van 5+ digits verwijderen?

Op basis van de tekst “Kan gegevens ophalen en wijzigen met behulp van toevoegen, bijwerken en verwijderen.” op:

zou het verwijderen ook massaal moeten kunnen via Invantive’s UniversalSQL.

Het SQL-statement zou dan gelijkend moeten zijn aan, maar vergeet niet om zorgvuldig vooraf de juiste werking te controleren op een testomgeving:

delete exactonlinerest..costcenters
where  length(code) >= 5

Merk op dat Exact Online validaties uitvoert bij verwijderingen, zoals mogelijkerwijs of de kostenplaatsen al ergens gebruikt zijn. Zo ja, dan zal het in het algemeen niet mogelijk zijn deze te verwijderen. Met een loop kan het los geprobeerd worden:

begin
  for r
  in
  ( select division
    ,      code
    from   exactonlinerest..costcenters
    where  length(code) >= 5
    order
    by     code
  )
  loop
    begin
      delete exactonlinerest..costcenters
      where division = r.division
      and    code     = r.code
      ;
      dbms_output.put_line('Deleted ' || to_char(r.division) || '.' || r.code || '.');
    exception
      when others
      then
        dbms_output.put_line('Ignore error on delete of ' || to_char(r.division) || '.' || r.code || ': ' || sqlerrm);
    end;
  end loop;
end;