首页 > Linux操作系统 > Linux操作系统 > 完善昨天写的数据库结构同步方案
在昨天的方案中,并没有实现对由系统自动生成约束名的约束的修改和删除的同步。
考虑到这种情况的同步较为复杂,决定通过before触发器防止SYS_XXXX之类对象的创建
触发器代码如下:
在昨天的方案中,并没有实现对由系统自动生成约束名的约束的修改和删除的同步。
考虑到这种情况的同步较为复杂,决定通过before触发器防止SYS_XXXX之类对象的创建
触发器代码如下:
--建立用户DDL BEFORE触发器,防止用户创建对象名称为SYS_XXXX之类的对象
--因为一般情况下SYS_XXXX的对象是由系统自动生成的对象,如没有命名的主键索引等,这些会引起数据库结构同步的不一致性
Create Or Replace Trigger tri_ddl_before Before ddl
ON suk.Schema
DECLARE
sql_text ora_name_list_t;
state_sql Varchar2(4000);
BEGIN
FOR i IN 1..ora_sql_txt(sql_text) LOOP
state_sql := state_sql||sql_text(i);
END LOOP;
dbms_output.put_line(state_sql);
dbms_output.put_line(instr(upper(state_sql),'SYS_'));
if ora_sysevent = 'CREATE' And instr(upper(state_sql),'SYS_')>0 then
raise_application_error(-20001, 'can not create/alter object use name like ''SYS_XXXXXX''');
End If;
EXCEPTION
WHEN NO_DATA_FOUND THEN
Null;
END tr_ddl_before;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/231499/viewspace-63698/,如需转载,请注明出处,否则将追究法律责任。