Ubuntu 上使用 Informix 触发器的完整指南
一 环境准备与连接
source ~/.bashrc 或 source /etc/profiledbaccess your_database - <<'EOF' ... EOFisql -v your_database your_user your_password二 触发器核心概念与命名规则
三 常用语法模板
CREATE TRIGGER trigger_name
{INSERT | UPDATE [OF col1, col2, ...] | DELETE}
ON table_name
REFERENCING {NEW AS n | OLD AS o | NEW AS n OLD AS o}
FOR EACH ROW
[WHEN (condition)]
(trig_action1 [, trig_action2 ...])
[BEFORE | AFTER]
[WHEN (condition)]
(trig_action1 [, trig_action2 ...])
[DISABLED | ENABLED];
四 完整示例 审计日志与字段更新
CREATE TABLE t_cust (
id SERIAL PRIMARY KEY,
name VARCHAR(60) NOT NULL,
status CHAR(1)
);
CREATE SEQUENCE seq_cust START WITH 1;
CREATE TABLE t_cust_audit (
id SERIAL PRIMARY KEY,
cust_id INTEGER,
action CHAR(1), -- I/U/D
op_time DATETIME YEAR TO FRACTION(5)
);
-- 插入前:用序列为 NEW.id 赋值,并写入审计
CREATE TRIGGER trg_cust_ins
INSERT ON t_cust
REFERENCING NEW AS n
FOR EACH ROW
( EXECUTE PROCEDURE setval('seq_cust', NEXTVAL('seq_cust')) INTO n.id,
INSERT INTO t_cust_audit(cust_id, action, op_time)
VALUES (n.id, 'I', CURRENT) );
-- 更新后:记录审计
CREATE TRIGGER trg_cust_upd
UPDATE ON t_cust
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
INSERT INTO t_cust_audit(cust_id, action, op_time)
VALUES (o.id, 'U', CURRENT);
-- 删除前:记录审计
CREATE TRIGGER trg_cust_del
DELETE ON t_cust
REFERENCING OLD AS o
FOR EACH ROW
INSERT INTO t_cust_audit(cust_id, action, op_time)
VALUES (o.id, 'D', CURRENT);
五 管理与排错常用操作
dbschema -d your_database db_schema.sql
dbschema -d your_database -t trigger > triggers.sql
ALTER TRIGGER trigger_name DISABLE;
ALTER TRIGGER trigger_name ENABLE;
DROP TRIGGER trigger_name;