Как использовать триггер SQL для записи номера строки соответствующего столбца - PullRequest
1 голос
/ 14 апреля 2010

Я хочу иметь таблицу «updateinfo» для записи каждой операции обновления / вставки / удаления в другую таблицу.

В оракуле я написал это:

CREATE TABLE updateinfo (номер NUMBER (10), имя таблицы VARCHAR2 (100 байт), действие VARCHAR2 (100 байт), дата UPDATE_DATE)

DROP TRIGGER TRI_TABLE;
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ТРИГГЕР TRI_TABLE
ПОСЛЕ УДАЛЕНИЯ ИЛИ ВСТАВКИ ИЛИ ОБНОВЛЕНИЯ
ПО демо
ССЫЛКА НОВЫЙ, КАК НОВЫЙ, СТАРЫЙ, КАК СТАРОЙ ДЛЯ КАЖДОГО РЯДА
НАЧАТЬ
если вставить то
вставить в updateinfo (номер, имя таблицы, действие, update_date) значения (rownum, 'demo', 'insert', sysdate);
elsif обновление тогда
вставить в updateinfo (номер, имя таблицы, действие, update_date) значения (rownum, 'demo', 'update', sysdate);
elsif удаляя то
вставить в updateinfo (номер, имя таблицы, действие, update_date) значения (rownum, 'demo', 'delete', sysdate);
конец если;
- ИСКЛЮЧЕНИЕ
- КОГДА ДРУГИЕ ТОГДА
- Рассмотрите возможность регистрации ошибки, а затем повторно поднимите
- ПОДНЯТЬ;
END TRI_TABLE;

но при проверке updateinfo весь столбец rnumber равен нулю. в любом случае, чтобы получить правильный номер строки?

Ответы [ 2 ]

3 голосов
/ 14 апреля 2010

Единственный вариант - использовать столбец первичного ключа вашей "демо" таблицы.

ROWNUM - это не то, что вы ищете, прочитайте объяснение .

ROWID выглядит как решение, но на самом деле это не так, потому что его не следует хранить для дальнейшего использования .

1 голос
/ 14 апреля 2010

ROWNUM - это не то, что вы думаете. ROWNUM - это счетчик, который имеет значение только в контексте одного выполнения оператора (то есть первая результирующая строка всегда имеет rownum = 1 и т. Д.). Я думаю, вы ищете ROWID, который идентифицирует строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...