完善昨天寫的資料庫結構同步方案

space6212發表於2019-03-07

在昨天的方案中,並沒有實現對由系統自動生成約束名的約束的修改和刪除的同步。

考慮到這種情況的同步較為複雜,決定透過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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章