Из того, что я могу определить, определение того, что: NEW и: OLD действительно немного размыто. Я видел, что это упоминается как ссылка на «псевдо-запись». Казалось бы, однако, что вместо фактического типа строки с возможностью ссылки на каждый столбец в типе строки Oracle устанавливает ссылку на каждый отдельный столбец, на который вы затем ссылаетесь, используя: NEW и: OLD. Но, как вы выяснили,: NEW и: OLD, похоже, сами по себе не справляются.
Например, здесь . (да, да, я знаю, это ссылка на Java, но см. комментарий о том, что OLD сама по себе не является допустимой ссылкой.
Я также нашел этот пакет примечаний SYS.DBMS_DEBUG
, который подразумевает, что: NEW /: OLD также не является действительным связыванием.
- get_value и set_value теперь поддерживают имена привязок. Связанные имена должны быть
- ставить в кавычки и использовать заглавные буквы. Обратите внимание, что триггерные привязки имеют
- квалифицированные имена, то есть ": NEW" не является действительной связью, тогда как ": NEW.CLMN"
- действует.
Будет ли этим предложением использовать AFTER
триггер для вас? Из вашего примера не похоже, что для значений происходит какая-либо проверка (понимая, что вы, возможно, не включили это в свой пример для простоты).
Я пытался представить способ создания открытого типа "на лету" (внутри вашего триггера), который бы соответствовал вашему типу строки таблицы, используя представление all_tab_columns, а затем вставил все значения в него, но не могу полностью обернуть мой обдумайте детали того, как это может вытряхнуть ... если это вообще сработает. И, скорее всего, это заняло больше времени, чем требуется для записи исторической записи!