Мне нужна помощь в устранении триггера, который я пытаюсь создать/использовать для регистрации обновлений и вставок в таблицу. Я использую таблицу customers_history для отслеживания всех изменений, внесенных в таблицу клиентов.sql error 04098 invalid trigger
CREATE TABLE customers (
custID INTEGER PRIMARY KEY,
custFName VARCHAR2(30),
custLName VARCHAR2(30),
custState CHAR(20),
custZip NUMBER(5)
);
-- log inserts and updates on customers table
CREATE TABLE customers_history (
histID INTEGER PRIMARY KEY,
cID INTEGER,
cFName VARCHAR2(30),
cLName VARCHAR2(30),
cState CHAR(20),
cZip NUMBER(5)
);
Кроме того, для histID я использую последовательность для автоматического приращения histID на customers_history таблице.
CREATE SEQUENCE ch_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1;
CREATE OR REPLACE TRIGGER audit_customers
BEFORE UPDATE
OR INSERT ON customers
FOR EACH ROW
BEGIN
INSERT INTO customers_history(histID,cID,cFName,cLName,cState,cZip)
VALUES(ch_seq.nextval,:NEW.custID,:NEW.custFName,:NEW.custLName,
:NEW.custState,:NEW.custZip);
END;
/
Я вставлял две строки на клиентов до создания триггера, и они работают нормально. После создания триггера он не позволит мне вставлять больше строк на клиентов, а также выдает сообщение об ошибке ORA-04098: trigger 'SYSTEM.AUDIT_CUSTOMERS' is invalid and failed re-validation 04098. 00000 - "trigger '%s.%s' is invalid and failed re-validation"
.
Я попытался выяснить, есть ли какие-либо ошибки кода, используя select * from user_errors where type = 'TRIGGER' and name = 'audit_customers';
, и он не возвращал строк. Не уверен, что это помогает или нет. Благодарю.
Почему триггер создается в схеме 'system'? Это кажется подозрительным. –
@gordon linoff Я запускаю все это в oracle db developer vm для класса, поэтому все наши таблицы, триггеры и т. Д. Работают на имени пользователя системы. – JRW2252
@ gordon linoff Кроме того, было бы очень глупо, если бы я просил совета ** на публичном сайте ** для кода со злым умыслом. Извините, что разочаровал вас. Ha ... – JRW2252