2016-05-20 9 views
0

After Insertトリガーを作成しようとしていますが、実行するとエラーは発生しませんが、mySQLサーバーは無視してしまいます。mysqlトリガーが認識されない

トリガーを作成した後にテーブルを検査すると、トリガーセクションは空のままです。コードは次のとおりです。

delimiter $$ 

    CREATE TRIGGER t_calcula_preco AFTER INSERT ON produto 

    begin 

    declare id = last_insert_id(); 

    declare tipo_id; 

    declare iva; 

    declare valor_iva; 

    declare preco_sem_iva; 

    -- guardamos o ID do tipo de jogo 
    select new.prod_tdj_id into tipo_id from produto where new.prod_id = id; 

    -- guardamos o ID do iva 
    select tdj_iva_id into iva from tipo_de_jogo where tdj_id = tipo_id; 

    -- guardamos o valor do IVA 
    select valor into valor_iva from iva where iva_id = iva; 

    -- guardamos o valor do preco sem iva 
    select new.prod_preco into preco_sem_iva from produto where new.prod_id = id; 

    -- agora calculamos o preco com iva 

    update produto set prod_preco = (preco_sem_iva + (preco_sem_iva * valor_iva/100)); 
    end ; 

    delimiter ; 

どのようなアイデアですか?

達成したいこと:テーブル "Produto"に行を挿入した後、別のテーブルの別の値に従ってこれらの値の1つを更新したいとします。

はEDIT:あなたを私はコードを複数回実行してみました
、それもトリガを作成doenst思わまたはそうでなければ、私は私の最初のコメントで述べたよう

+0

クライアントをリフレッシュしてみてください。ところで、テーブルのトリガーセクションは何ですか? – Mihai

+0

それは私が "テーブルを検査する"私のSQLサーバー上で、それは列、ストアプロシージャ、トリガなどのセクションを持って、私はトリガコードを作成した後でもトリガは空です。 –

+0

私はコードを何度も実行しようとしましたが、それはトリガを作成するdoenstだと思われます。それ以外の場合、エラー "Trigger already exists"が表示されます –

答えて

0

「トリガーがすでに存在している」私にエラーを与えるだろうトリガがオンのテーブルの内容を更新することはできません(トリガが動作している行を除いて)。それから選択するのは一般的には良い考えではありません。また、他のものが示唆しているように、($$デリミタの代わりに)トリガ定義を実際に終了させませんでした。さらに、NEWの使用についてちょっと混乱しているようでした。

DELIMITER $$ 

CREATE TRIGGER t_calcula_preco AFTER INSERT ON produto 

BEGIN 

    DECLARE iva; 
    DECLARE valor_iva; 

    -- guardamos o ID do iva 
    SELECT tdj_iva_id INTO iva 
    FROM tipo_de_jogo 
    WHERE tdj_id = NEW.prod_tdj_id 
    ; 

    -- guardamos o valor do IVA 
    SELECT valor INTO valor_iva 
    FROM iva 
    WHERE iva_id = iva 
    ; 

    -- agora calculamos o preco com iva 
    SET NEW.prod_preco := (NEW.prod_preco + (NEW.prod_preco * valor_iva/100)) 
    ; 

END$$ 

DELIMITER ; 

編集:私は誤って残っていた取り出された最終UPDATEは、初期コピー&ペーストから付属しました。すべてのSQLキーワードを大文字にして読みやすくしています。

注意:ivaおよびvalor_ivaの宣言にはデータ型が必要です。

関連する問題