我想创建表来保存我的oracle数据库中的所有CONSTRAINTs更改, 所以我创建了这个表(表名,约束名,日期,模式,如[insert | update | delete])
.menu li {
display: inline-block;
padding: 10px;
border: 1px solid #ccc;
}
.menu li a {
text-decoration: none;
}
问题在于插入数据,
我在考虑在插入或更新或删除后在user_cons_columns创建触发器,
但我发现user_cons_columns是一个视图,我无法在其上创建触发器,
那我该怎么做呢?
或者我可以创建触发器的表来执行此操作???
谢谢.......
答案 0 :(得分:0)
User_Cons_Columns是oracle中的元数据视图,您无法使用它来监视约束更改。
我认为,您可以使用此元数据视图:
article_no
它显示LAST_CHANGE列已更改哪个约束以及您可以使用它们的其他数据。
答案 1 :(得分:0)
我不知道我们是否可以在Oracle的数据字典表中创建DML TRIGGER
,但这听起来不错。
我建议您在ALTER
活动中创建DDL Trigger
首先,作为一次性活动,您可以将所有可用约束存储在CONS
表中。
然后在trigger
中,您可以使用这些条件来检查表和列是否已更改。
if (ora_sysevent = 'ALTER' and
ora_dict_obj_type = 'TABLE')
then alter_column :=
ora_is_alter_column('FOO');
end if;
然后,您可以查询user_cons_columns
,ALL_CONSTRAINTS
和CONS
- 无论您发现哪个与存储数据相关 - 都可以查找是否添加了新约束。如果确实添加或修改了它,请输入CONS
或者更新它(使用MERGE
语句)
答案 2 :(得分:0)
正如您所说,您无法在USER_CONS_COLUMNS上创建该类型的触发器:
SQL> create or replace trigger trg_myucc
2 before insert
3 on user_cons_columns
4 begin
5 null;
6 end;
7 /
create or replace trigger trg_myucc
*
ERROR at line 1:
ORA-25001: cannot create this trigger type on this type of view
为什么我们不尝试 INTREAD OF TRIGGER ?
SQL> create or replace trigger trg_myucc
2 instead of insert
3 on user_cons_columns
4 for each row
5 begin
6 null;
7 end;
8 /
on user_cons_columns
*
ERROR at line 3:
ORA-01031: insufficient privileges
好的,那也行不通。但是,是什么阻止我们在视图上创建视图,然后在新创建的视图上创建INSTEAD OF触发器?
SQL> create or replace view my_ucc as select * from user_cons_columns;
View created.
SQL> create or replace trigger trg_myucc
2 instead of insert
3 on my_ucc
4 for each row
5 begin
6 null;
7 end;
8 /
Trigger created.
精细;现在你有办法做你应该做的事情。有关触发器的更多信息here。