2016-04-07 7 views
0

salesテーブルを作成したいとします。販売テーブルに更新があると、在庫テーブルのデータは自動的に減額されます。SQL ServerのOracle if-elseトリガーに相当します。

これは、Oracleでの私のコードです:

create trigger trigger_updatestok11 
after insert 
on transaksijualbeli for each row 
begin 
    if (:new.kategoritransaksi in ('beli')) 
    then 
    update stokbarang set jumlahstok= jumlahstok +:new.jumlah 
    where Nobrg=:new.nobrg; 
    end if; 
    if (:new.kategoritransaksi in ('jual')) 
    then 
    update stokbarang set jumlahstok= jumlahstok -:new.jumlah 
    where Nobrg=:new.nobrg; 
    end if; 
end; 

は、私はSQL Serverのことをどのように行うことができますか?

+0

をあなたは試したことがありますか?どこで立ち往生しましたか? – Tim

+0

同じ 'nobrg'が' transaksijualbeli'に複数回出現しますか? – Squirrel

答えて

1

まず、SQL Serverのトリガーはfor each rowオプションを持っていない - トリガは一度声明あたりを解雇され、そのINSERT文が複数の行を挿入した場合、Insertedは、複数の行が含まれています。あなたはInsertedができる(!とます)が複数の行が含まれていることを考慮して、適切な、セットベースのな方法であなたのトリガーを記述する必要がある - このような何か:

create trigger trigger_updatestok11 
after insert 
on transaksijualbeli 
as 
begin 
    update stokbarang 
    set jumlahstok = jumlahstok + i.jumlah 
    from Inserted i 
    where stokbarang.Nobrg = i.nobrg 
     and i.kategoritransaksi in ('beli'); 

    update stokbarang 
    set jumlahstok= jumlahstok - i.jumlah 
    from Inserted i 
    where stokbarang.Nobrg = i.nobrg 
     and i.kategoritransaksi in ('jual'); 

end 
+0

は、同じ 'nobrg'を持つ' transaksijualbeli'の複数の行を処理するトリガーではありませんか? – Squirrel

関連する問題