触发器在一个数据库里面已经写好,并且通过测试ok了!
现在需要把这些触发器搬到另外一个正式的数据库上面去,能否生成sql,怎么生成?在新的数据库上执行sql(怎么执行),自动把触发器加上?而且还想把触发器的源码也搬到新的数据库上!请教有经验的人士帮忙。
我的触发器是这样子的结构,trigger调用pakage和pakagebody的!

解决方案 »

  1.   

    用下面的語句產生trigger的創建語句:
    select 
    DBMS_METADATA.GET_DDL('TRIGGER', 'your_trigger_name', 'your_schema')
    FROM DUAL;
    然後將語句在正式庫中執行一下就可以創建了。
      

  2.   

    利用user_source 查看 触发器的定义 select text from user_source where type='TRIGGER' and name='xxx'
      

  3.   


    你的意思是对table同步?是说在新数据库上面重新建立table,就会自动把触发器和table一起重新建立吗?
    新数据库上的table早已经存在的,我是想在存在的table上添加触发器。
    我的2个数据库是不同ip地址的数据库。
      

  4.   

    view下trigger,把定义代码拷贝出来在目标数据库上执行下不就好了
      

  5.   

    那你查詢到的結果中,是不是有create trigger的語句呀,把那個查詢出來的結果在新庫中執行一下就行了。
      

  6.   


    -- 在舊數據庫中查詢
    select 
    DBMS_METADATA.GET_DDL('TRIGGER', 'USER_TRI', 'HR')
    FROM DUAL;-- 結果
    DBMS_METADATA.GET_DDL('TRIGGER','USER_TRI','HR')                                
    --------------------------------------------------------------------------------
                                                                                    
      CREATE OR REPLACE TRIGGER "HR"."USER_TRI"                                     
      before insert or update or delete on ol_user_t                                
      for each row                                                                  
    begin                                                                           
      if inserting then                                                             
        insert into users values (ol_bbs_user_s.nextval,:new.loginName, :new.userNam
    e,'1.gif',sysdate,1,1,50,1);                                                    
      elsif updating then                                                           
        update users set uPass = :new.Password where uName = :new.LoginName;        
      else                                                                          
        delete from users where uName = :new.LoginName;                             
      end if;                                                                       
    end;                                                                            
    ALTER TRIGGER "HR"."USER_TRI" ENABLE  -- 在新數據庫中,用sqlplus也好,其他工具也好,執行
      CREATE OR REPLACE TRIGGER "HR"."USER_TRI"                                     
      before insert or update or delete on ol_user_t                                
      for each row                                                                  
    begin                                                                           
      if inserting then                                                             
        insert into users values (ol_bbs_user_s.nextval,:new.loginName, :new.userNam
    e,'1.gif',sysdate,1,1,50,1);                                                    
      elsif updating then                                                           
        update users set uPass = :new.Password where uName = :new.LoginName;        
      else                                                                          
        delete from users where uName = :new.LoginName;                             
      end if;                                                                       
    end;      
    -- 這樣就可以在新庫中創建舊庫的trigger了
      

  7.   

    nGX20080110,估计你还不明白我的意思。
    我现在这么做解决了,就是有点麻烦,因为有触发器很多,需要一个一个的做:
    在PL/SQL里面(当然这个PL/SQL我连的是新数据库),我打开触发器的源代码后,直接执行下,提示“编译成功”,这样就添加到新数据库了!估计用sql不能批量创建吧?
      

  8.   

    那你可以自己寫個pl/sql代碼來output所有trigger的源碼到一個文件,然後在新庫中運行該文件