2014-09-28 60 views
0

我正在爲MySQL數據庫編寫PLSQL觸發器。我正在嘗試聲明變量。所以我在觸發器中寫了一個聲明塊。這裏是我的以下代碼在mysql中的PLSQL觸發器中聲明變量

CREATE TRIGGER leave_approve_trigger 
AFTER UPDATE ON leave_status 
FOR EACH ROW 
DECLARE //Syntax error 
current_id integer; 
BEGIN 
if NEW.status == 'APPROVED' 
THEN 
select id into current_id from leave_request_table; 
insert into update_table values(current_id); 
ENDIF; 
END; 

我得到的錯誤是mysql版本5.5.0的語法錯誤。我們可以實際聲明變量嗎?在此先感謝

+1

PL/SQL是Oracle數據庫的腳本語言。它不適用於MySQL。以下是對MySQL創建觸發器語法的引用:http://dev.mysql.com/doc/refman/5.7/en/create-trigger.html。 – 2014-09-28 13:24:47

+0

MySQL中沒有PL/SQL。另外你的代碼對於PL/SQL也是無效的,因爲比較運算符是'='而不是'==' – 2014-09-28 13:47:30

回答

1

在MySQL的一點點不同的程序語法,你必須改變一些線路:

  • 申報塊必須開始的代碼之後。
  • ==操作符,但是高喊成=
  • ENDIF;必須改爲END IF;
  • 所有塊必須從更改語句的分隔符開始,最後恢復它。
  • 如果一個字段名是一個保留字,它可以用``括起來以避免語法錯誤。

下面是代碼:

DELIMITER $$ 

CREATE TRIGGER leave_approve_trigger 
AFTER UPDATE ON leave_status 
FOR EACH ROW 
BEGIN 
    DECLARE current_id int; 

    if NEW.`status` = 'APPROVED' THEN 
     select id into current_id from leave_request_table; 
     insert into update_table values(current_id); 
    END IF; 

END$$ 

DELIMITER ; 
1

我認爲MySQL的版本會更喜歡這樣的:

delimiter $$ 

CREATE TRIGGER leave_approve_trigger AFTER UPDATE ON leave_status 
FOR EACH ROW 
BEGIN 
    if NEW.status = 'APPROVED' THEN 
     insert into update_table 
      select id 
      from leave_request_table; 
    END IF; 
END; 

delimiter ; 

順便說一句,你不需要任何的Oracle變量或MySQL。只需使用insert . . . select

我認爲你也想匹配leave_request_table中的特定行,但是你的觸發器不會這樣做。