我数据库有一个张是存的我数据库里表的一个信息,结构是:
表       中文表   表类型 ....
TAB1      员工表
TAB2      工资表
TAB3      考勤表
...........
现在我要做一个TRIGGER,在数据库里的物理删除表时候,自动把这个表里的相应的记录删除
也可以这样:
在建一个TRIGGER在这个表里,在删除这个表的一条记录的时候,删除数据里相应的物理表。。

解决方案 »

  1.   

    >>现在我要做一个TRIGGER,在数据库里的物理删除表时候,自动把这个表里的相应的记录删除
    据我所知的数据库(oracle sql server sybase),没有这样的触发器>>在建一个TRIGGER在这个表里,在删除这个表的一条记录的时候,删除数据里相应的物理表。。
    CREATE TRIGGER delete_table
    ON SYS_TABLE
    FOR DETETE
    AS 
    DECLARE @tab_name
    SELECT @tab_name = TABLE_NAME FROM deleted
    EXEC ('DROP TABLE ' + @tab_name )
      

  2.   

    不对,我是在ORACLE里,就是在SYS_TABLE删除表TAB1这条记录,现在触发器要做的事是:在数据库里删除TAB1这个物理表
      

  3.   

    楼主的名字取得好厉害得。。kill server
      

  4.   

    采用ddl触发器可以解决这个问题,示例如下:-- 建立一个表纪录ddl操作
    SQL> create table ddl_log
      2      ( ddl_time date
      3     , object_name varchar2(30)
      4     , action varchar2(100));
    Table created.-- 建立一个基于ddl的trigger,注意该trigger所处理的对象名存在ORA_DICT_OBJ_NAME中
    SQL> create or replace trigger audit_db_object_drop
      2     after drop on schema
      3  begin
      4     insert into ddl_log
      5     values (sysdate, ORA_DICT_OBJ_NAME,'DROPPED');
      6  end;
      7  /
    Trigger created.--建立一个测试表
    SQL> create table tbl_test(id integer);
    Table created.--删除测试表
    SQL> drop table tbl_test;
    Table dropped.--删除操作被纪录在log表中
    SQL> select * from ddl_log;
    DDL_TIME         OBJECT_NAME
    ---------------- ------------------------------
    ACTION
    --------------------------------------------------------------------------------
    2004-11-15-13:31 TBL_TEST
    DROPPED