Bei einem Trigger wird ein dynamischer Programm-Aufruf ausgeführt, was natürlich Zeit kostet!
Eventuell sollte man den Trigger nur einmal pro Statement aktivieren (FOR EACH STATEMENT) aktivieren.
Damit würde man die Anzahl der dynamischen Programmaufrufe auf 1 reduzieren.
Die Änderungen erfolgen dann in dem Trigger, d.h. die Datensätze stehen als Tabelle zur Verfügung und dann kann man mit einem ganz normalen Cursor durch die Datensätze lesen und die Änderungen hingerlegen.
Des weiteren würde mich interessieren was hinter BUBITOOLS.getTimestamp steckt.
Vielleicht auch wieder ein Programm? Sollte es sich um eine Funktion in einem Service-Programm handeln, sollte dies mit Aktivierungsgruppe *CALLER erstellt sein.
Sollte es sich um eine SQL-Funktion handeln, sollte DETERMINISTIC die Funktion mit DETERMINISTIC erstellt worden sein.
... und warum nicht direkt mit SQL konvertieren und zwar gleich beim Insert und nicht erst durch einen Trigger? Timestamp(Digits(NumYYYYMMDD) concat Digits(NumHHMMSS))

Die Frage, die sich mir aber als aller erstes stellt, warum wird eine so riesige Tabelle dupliziert?
Kann an dieser Stelle nicht mit zusätzlichen Views, die die Datums- und Zeit-Werte konvertieren gearbeitet werden?

Birgitta