2013-08-05 68 views
0

我有一個包含觸發器的sql文件。我想用Ant腳本來執行這個文件:db2使用ant腳本執行觸發器

<target name="exec-sql-proc_db2" depends="init"> 
    <property name="project.sql.dir" value="${project.metadata.dir}/sql" /> 
    <property name="triggerFile" value="${project.sql.dir}/triggers_db2.sql" /> 
    <echo message="${triggerFile}" /> 
    <sql rdbms="DB2" driver="com.ibm.db2.jcc.DB2Driver" 
     url="jdbc:db2://localhost:50000/project:currentSchema=mySchema;" 
     userid="root" password="root" 
     classpath="C:\projects\myProject\lib\db2jcc.jar" 
     src="${triggerFile}" 
     onerror="${sql.onerror}" 
     keepformat="true" delimiter="/" /> 
</target> 

我得到構建成功,但觸發器沒有執行! 有沒有其他解決方案?

我的觸發是:

CREATE or REPLACE TRIGGER PRODUCT_HISTORY_AFTER_UPDATE 
AFTER UPDATE ON PRODUCT 
REFERENCING NEW AS N 
FOR EACH ROW 
BEGIN 
    INSERT INTO productHistory (id_h, id_product , name) values (id_h_seq.nextval, N.id_product , N.name); 

    END 
/
+0

你是什麼意思與「*觸發器不執行*」?觸發器僅在相應的DML(插入,更新,刪除)語句運行時才「執行」。 –

+0

我在一個名爲product的表上有一個觸發器,當我更新這個產品中的一行時,我插入到product_history中, 這個觸發器保存在一個文件中,我用這個腳本來執行觸發器, 然後當我更新一行在表格產品中,表格中沒有插入任何行product_history – junior

+0

您是否檢查了觸發器是否實際創建?你檢查觸發器是否啓用/有效/有效?發佈觸發器的完整代碼和您使用的DML語句。 –

回答

1
<sql rdbms="DB2" driver="com.ibm.db2.jcc.DB2Driver" 
     url="jdbc:db2://localhost:50000/project:currentSchema=mySchema;" 
     userid="root" password="root" 
     classpath="C:\projects\myProject\lib\db2jcc.jar" 
     src="${triggerFile}" 
     onerror="${sql.onerror}" 
     delimiter="/" > 

SET SCHEMA mySchema 
</sql> 

我想這部分代碼,是解決我的問題