oracle中斜線(/)和分號(;)問題

一、問題描述

公司最近有個項目要上線,數據庫用的是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; 
/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章