2016-10-26 14 views
0

5行目(最初の宣言のセミコロン)にエラーが発生しました。何かがMariaDBに対応していません。誰もが同様の問題を抱えていたか、この種の問題を解決する方法を知っていましたか?トリガー内の変数の宣言

CREATE TRIGGER incative 
BEFORE DELETE 
ON users FOR EACH ROW 
BEGIN 
    DECLARE _user INT; 
    DECLARE username VARCHAR(150),_password VARCHAR(150), 
      email VARCHAR(320),ip_address varchar(150), 
      _data VARCHAR(120),_time VARCHAR(150); 
    DECLARE _active int DEFAULT 1; 

    SELECT * INTO _user, username, _password, email, ip_address, 
        _data, _time, _active 
     FROM users WHERE ID_User = old.ID_User 

    INSERT into users(_user, username, _password, email, ip_address, 
         _data, _time, _active) 
END; 

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

+0

なぜあなたはすでに 'old'にある列を取得しますか?なぜあなたは削除している行を再挿入するのですか? '_active'で間違ったロジック?または 'into users? 'と入力しますか? –

+0

アップデートがうまくいかなかったので、別の解決策を試してみる必要がありました。このソリューションは私のために良く見えました。あなたがもっと良い解決策を知っているなら、この質問はそれのためのものです。ありがとう。 –

答えて

0

区切り文字を追加する必要があります。$$前に作成...あなたはこの答えを確認することができます詳細については、

DELIMITER $$ 
CREATE TRIGGER incative 
BEFORE DELETE ..... 

を:https://stackoverflow.com/a/1346645/1548932

私はmariaDBのためのケースを知らないが、あなたは、MySQLを使用している場合あなたは、ライン6を変更する必要があります。

DECLARE username,_password,email ,ip_address,_data,_time VARCHAR(150); 

または長さは貴様であれば、あなたは次のように1行につき1つの変数を宣言する必要があります。

DECLARE username VARCHAR(150) 
Declare email VARCHAR(320) 

最後に、忘れないでください。 8行目と10行目の最後に

+0

セミコロン(;)を使用するたびに最初の行(DELIMITER $$)にエラーが表示され、DELIMITERに変更されました。私はあなたが示唆した変更を加えました、そして、私はまだ同じエラーを取得します。 #1064 - SQL構文にエラーがあります。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックしてください –