2025-02-25 05:43:16
我本地模拟了一下, IMP 的时候, insert 触发器是会被触发的。
下面为测试的代码
-- 测试表结构.
CREATE TABLE test_exp_imp (
code VARCHAR(10),
value INT,
PRIMARY KEY(code)
);
INSERT INTO test_exp_imp(code) VALUES('TEST0000');
INSERT INTO test_exp_imp VALUES('TEST0001', 1);
INSERT INTO test_exp_imp VALUES('TEST0002', 2);
INSERT INTO test_exp_imp VALUES('TEST0003', 3);
INSERT INTO test_exp_imp VALUES('TEST0004', 4);
INSERT INTO test_exp_imp VALUES('TEST0005', 5);
测试计划:
原始数据中 code 有数据, value 为 NULL 或者 小于 10 的数据
INSERT 触发器中, 自动设置 value 为 100.
也就是如果 导入数据以后, value 大于 100 了, 说明触发器执行了.
-- 创建触发器.
CREATE OR REPLACE TRIGGER tr_test_exp_imp
BEFORE INSERT ON test_exp_imp
FOR EACH ROW
BEGIN
-- 设置流水.
:new.value := 100;
END;
/
-- exp 导出数据.
E:\>EXP test/test file=test_exp_imp.dmp tables=(test_exp_imp)
Export: Release 9.2.0.1.0 - Production on 星期三 7月 24 11:42:04 2013
......
-- 首先删除所有的旧数据.
SQL> TRUNCATE TABLE test_exp_imp;
表已截掉。
-- imp 导入数据. (因为表已存在, 这里 IGNORE=Y 忽略创建错误)
E:\>IMP test/test file=test_exp_imp.dmp tables=(test_exp_imp) IGNORE=Y
Import: Release 9.2.0.1.0 - Production on 星期三 7月 24 11:47:19 2013
......
导入完毕后,查询数据
-- 查询数据.
SQL> select * from test_exp_imp;
CODE VALUE
-------------------- ----------
TEST0000 100
TEST0001 100
TEST0002 100
TEST0003 100
TEST0004 100
TEST0005 100
已选择6行。
结果显示: imp 处理过程中, 触发器代码,被执行了.
2025-02-25 05:54:21