2017-06-07 19 views
0

phpmyadminでトリガーを作成する際に問題があります。ここに私の構文です:作成トリガーの問題phpmyadmin

DECLARE n_ubicacion VARCHAR(45) DEFAULT ''; 

IF (OLD.id_ubicacion <> NEW.id_ubicacion) THEN 
SELECT ubicacion INTO n_ubicacion FROM ubicacions WHERE id = NEW.id_ubicacion LIMIT 1; 
END IF; 

INSERT INTO historico_equipos(usuario, id_equipo, estado, ubicacion, empleado, f_asignacion, created_at) VALUES (CURRENT_USER(), NEW.id, NEW.id_estado, n_ubicacion, NEW.id_empleado, NEW.f_asignacion, CURRENT_DATE()) 

私はどこに問題があるのか​​分かりません。 phpmyadminで次のエラーを表示してください:

'DECLARE n_ubicacion VARCHAR(45)DEFAULT' 'の近くの構文で何かが間違っています。 IF(OLD.id_ubicacion <> NEW.id_ubicacion)THEN '

ありがとうございました。

答えて

0
  1. トリガー内にDECLAREステートメントの上に他のステートメントがあるかどうかを確認します。そうであれば、エラーをスローする可能性があります。

  2. デリミタを確認してください。デフォルトでは、MySQLの区切り文字は ';'です。したがって、最初の ';'を見ると、クエリが壊れます。したがって、トリガーを作成する前に他の区切り文字を使用してください。

例:

DELIMITER // 

CREATE TRIGGER ... 
BEGIN 
DECLARE n_ubicacion VARCHAR(45) DEFAULT ''; 
IF (OLD.id_ubicacion <> NEW.id_ubicacion) THEN 
    SELECT ubicacion INTO n_ubicacion FROM ubicacions WHERE id = 
             NEW.id_ubicacion LIMIT 1; 
END IF; 
INSERT INTO historico_equipos(usuario, id_equipo, estado, ubicacion, empleado, f_asignacion, created_at) VALUES (CURRENT_USER(), NEW.id, NEW.id_estado, n_ubicacion, NEW.id_empleado, NEW.f_asignacion, CURRENT_DATE()) 
END// 

はその後、再びデフォルトの区切り文字を変更します。

DELIMITER ;

+0

私はphpmyadminのトリガの定義フィールドに設定しています。私は構文の最後に 'DELIMITER //'と 'DELIMITER;'を追加しましたが、同じエラーが表示されます。 –

関連する問題