2017-06-29 5 views
0

よるphpMyAdminに、私はこのトリガーに構文エラーがあります。エラーMySQLの構文トリガー

CREATE TRIGGER insert_device 
AFTER INSERT ON table_e 
FOR EACH ROW 

BEGIN 

DECLARE m_id_a INTEGER; 
DECLARE m_id_d INTEGER; 
m_id_d := 0; 

SELECT id_a INTO m_id_a FROM table_ua WHERE ua_eui = NEW.eui LIMIT 1; 

SELECT id_d INTO m_id_d FROM table_d WHERE d_idapp = m_id_a ORDER BY id asc LIMIT 1; 
IF (m_id_d == 0) THEN 
    INSERT INTO table_d (d_addr, d_eui, d_apps, d_nwks, d_idapp) 
    VALUE (NEW.addr, NEW.eui, NEW.apps, NEW.nwks, m_id_a); 
ELSE 
    UPDATE TABLE table_d 
    SET 
     d_addr = NEW.addr, 
     d_eui = NEW.eui, 
     d_apps = NEW.apps, 
     d_nwks = NEW.nwks 
    WHERE id_d = m_id_d; 
END IF; 

END 

エラーは次のとおりです。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':= 0; 

エラーとは何ですか?私は間違っていることを理解していません。

ありがとう。

答えて

1

いくつかの構文エラーがあなたのトリガーであります

  1. declare変数、あなたはsetとそれを呼び出す必要があります。
  2. IF式は==を使用できません。
  3. update構文では、UPDATE table_d SET ...のようなテーブル名を指定する必要があります。

だから、トリガー以下試してください。

delimiter $$ 
CREATE TRIGGER insert_device 
AFTER INSERT ON table_e 
FOR EACH ROW 

BEGIN 

DECLARE m_id_a INTEGER; 
DECLARE m_id_d INTEGER; 
set m_id_d = 0; 
SELECT id_a INTO m_id_a FROM table_ua WHERE ua_eui = NEW.eui LIMIT 1; 

SELECT id_d INTO m_id_d FROM table_d WHERE d_idapp = m_id_a ORDER BY id asc LIMIT 1; 
IF (m_id_d = 0) THEN 
    INSERT INTO table_d (d_addr, d_eui, d_apps, d_nwks, d_idapp) 
    VALUE (NEW.addr, NEW.eui, NEW.apps, NEW.nwks, m_id_a); 
ELSE 
    UPDATE table_d 
    SET 
     d_addr = NEW.addr, 
     d_eui = NEW.eui, 
     d_apps = NEW.apps, 
     d_nwks = NEW.nwks 
    WHERE id_d = m_id_d; 
END IF; 

END 
$$ 
+0

はどうもありがとうございました、それが動作します! – iAmoric