2017-10-13 111 views
1

我試圖創建我的觸發器,但它要求綁定每次。當我在出現的窗口上單擊應用時,它會以我想要的方式工作...但是,它會記錄錯誤...Oracle PL/SQL觸發器請求綁定

我的觸發器檢查客戶端是否處於活動狀態,並且不允許的變化,如果它被發現是積極的......

CREATE Trigger Client_Activity 
BEFORE Insert or Update or Delete ON Client 
FOR EACH ROW 
DECLARE 
    VAR_AC char(2); 
BEGIN 
    IF UPDATING THEN 
     SELECT Activity INTO VAR_AC 
     FROM Client_Additionals 
     WHERE Activity = :Old.Activity; 

     IF Activity = 'AC' 
      THEN Raise_Application_Error(-20999, 'active') 
     END IF; 
END; 
/

Oracle版本12使用的SQLDeveloper

+0

認沽'SET DEFONE OFF;''之前CREATE TRIGGER ....'語句,然後按F5'運行script' – krokodilko

+0

@a_horse_with_no_name - 與代碼綁定變量時的情況相同。不同的前端做不同。 SQL \ * Plus只會說*綁定變量「OLD」未聲明*。 SQL Developer將打開一個標有「Enter binds」的彈出窗口,等待「Old」的值。我相信Toad會做類似於SQL Developer的事情。 – mathguy

+0

@krokodilko - 我認爲這不會解決問題......爲什麼呢?這個問題是一個(意外的,或者說是錯誤的)綁定變量,而不是一個替代變量。 – mathguy

回答

0

您的觸發可使用兩種語法錯誤:

  1. IF缺少的END IF
  2. 您需要的可變var_ac
  3. 內容比較你缺少一個;Raise_Application_Error()

後把它們一起,你可以毫無問題創建觸發器。

但是,您需要使用SQL Developer中的「運行腳本」按鈕來運行這樣的PL/SQL塊。

enter image description here

的SQL * Plus不需要特殊處理:

enter image description here