晚上,需要有关触发器的帮助。
在我的开发环境中,我有两个表,一个包含员工数据(包含将通过ALTER TABLE修改的各种数据错误)和日志表。
如果使用ALTER TABLE sql修改第一个数据表中包含的数据,我如何设计一个更新日志表中包含的多行的触发器,例如'issue_status','status_update_date'?
- 员工表
CREATE TABLE emp(
emp_id INTEGER NOT NULL,
emp_name VARCHAR(30),
emp_postcode VARCHAR(20),
emp_registered DATE,
CONSTRAINT pk_emp PRIMARY KEY (emp_id));
- 日志表的SQL
CREATE TABLE data_log
(issue_id NUMBER(2) NOT NULL,
table_name VARCHAR2(20),
row_name VARCHAR2(20),
data_error_code NUMBER(2),
issue_desc VARCHAR2(50),
issue_date DATE,
issue_status VARCHAR2(20),
status_update_date DATE);
- 示例日志插入
INSERT INTO data_log( SELECT DI_SEQ.nextval, 'emp', emp.emp_id, '1', 'emp_name case size not UPPER', SYSDATE, 'un-fixed', '' FROM emp WHERE emp_name != UPPER(emp_name));
这是插入日志表的问题示例。我想要做的就是如果我更新emp表以将'emp_name'设置为Upper,则触发器将注册此更新并将行'issue_status'和'status_update_date'更改为'fixed',并将更改时的'sysdate'更改为由
我已经做了一些浏览但是我仍然在努力理解,任何文献推荐也会受到赞赏。
提前感谢您的帮助。
答案 0 :(得分:0)
请注意,我们不会像您所提到的那样使用ALTER TABLE
来更新表的行。我们使用Update
语句。您的trigger
应该是这样的BEFORE UPDATE TRIGGER
。
CREATE OR REPLACE TRIGGER trig_emp_upd BEFORE
UPDATE ON emp
FOR EACH ROW
WHEN ( new.emp_name = upper(old.emp_name) )
BEGIN
UPDATE data_log
SET
issue_status = 'fixed',
status_update_date = SYSDATE
WHERE
row_name =:new.emp_id;
END;
/