2016-04-14 12 views
0

注文表の販売および更新後に在庫を更新するProductMaintという名前のトリガーを作成するにはどうしたらいいですか?2つの行、つまり製造元と製品名を統一して、 。どのように私はエラーなしでそれを引き起こすことができますか? 私はそれを行っているが、エラーが無効なバインド変数変数の置換をオフにしSQL開発者の無効なバインド変数の取得

CREATE OR REPLACE TRIGGER ProductMaint 
    AFTER INSERT ON Orders 
    FOR EACH ROW 
    WHEN(NEW.Qty >0) 
    BEGIN 
    UPDATE Products 
    SET Qtyonhand = Qtyonhand - :NEW.Qty 
    WHERE Products.Mfr =Orders.Mfr 
    AND Products.Product =Orders.Product; 
    DBMS_OUTPUT.PUT_LINE(:New.Qtyonhand);  

END; 
/
+0

と(の間にスペースを挿入し、私は手順そのを通じて注文更新を行うとき – cableload

+0

その今遵守し、私が言っている: エラーレポートを - ORA-04098:?トリガー「S304.PRODUCTMAINTは」再試行が無効で失敗しました 04098. 00000 - "トリガ '%s。%s'は無効で再検証に失敗しました"原因:トリガを実行しようとしましたが、 が無効であることが判明しました。また、コンパイル/許可 がトリガーに失敗したことを意味します。 *処置:オプションは、コンパイル/ authoライズエラー、 トリガーを無効にするか、トリガーをドロップします。 – user3591952

答えて

0

使用SET DEFINE OFFを促しています。
Run script (F5)コマンド/アイコンを使用してスクリプト全体を実行します。

SET DEFINE OFF; 
    CREATE OR REPLACE TRIGGER ProductMaint 
    AFTER INSERT ON Orders 
    FOR EACH ROW 
    WHEN(NEW.Qty >0) 
    BEGIN 
    UPDATE Products 
    SET Qtyonhand = Qtyonhand - :NEW.Qty 
    WHERE Products.Mfr =Orders.Mfr 
    AND Products.Product =Orders.Product; 
    DBMS_OUTPUT.PUT_LINE(:New.Qtyonhand);  

END; 
/
+0

返信ありがとうございました。それは私にバインドを入力するよう促して、無効なバインド変数を表示します。 – user3591952