一、問題描述
公司最近有個項目要上線,數據庫用的是oracle11g,整理的sql腳本時發現,有些sql單個執行時都可以正常執行,放到sql文件中批量執行時就報錯。
經過排查,發現是由於觸發器結尾的分號(;)並不能執行創建該觸發器,需要添加斜線來執行。
二、解決方法
出現上面問題的原因是:
1、對於sql語句(如insert、update等),;
結尾表示sql結束,並且會執行sql。如:
insert into skd_score_card_cycle values (1,1,1,0,sysdate,0,sysdate);
insert into skd_score_card_cycle values (2,2,1,0,sysdate,0,sysdate);
2、對於sql語句塊、pl塊,;
表示sql結束,但運行sql,需要用/
來執行。/
作用是讓服務器開始執行前面所寫的sql腳本。如下面觸發器結尾需要加個/
來執行。
create or replace trigger tr_data_score
before insert on skd_data_score
for each row
begin
select seq_data_score.nextval into :new.data_id from dual;
end;
/
create or replace trigger tr_data
before insert on skd_data
for each row
begin
select seq_data.nextval into :new.data_id from dual;
end;
/