2015-06-27 81 views
0

我在SQL Server中編寫了此代碼。我想爲Oracle和PL/SQL編寫此代碼。任何人都可以幫助我如何做這份工作?如何將代碼從SQL Server轉換爲Oracle

SQL服務器/ T-SQL:

ALTER TRIGGER [dbo].[checkBalance] 
    ON [dbo].[Orders] 
FOR insert 
AS 
BEGIN 
    IF (SELECT goodcount FROM goods WHERE id=(SELECT gid FROM Inserted)) < (SELECT gcount FROM Inserted) 
    BEGIN 
     RAISERROR ('Inventory is low',10,1) 
     rollback 
    END 
+0

你需要先來刺它,並張貼你試過什麼。沒有人會爲你寫信,卻沒有看到你投入了多少努力。 – Greg

回答

0

這將是這樣的

CREATE OR REPLACE TRIGGER MySchema.checkBalance 
AFTER INSERT 
    ON MySchema.Orders FOR EACH ROW 
DECLARE 
    v_count pls_integer; 
BEGIN 
    SELECT goodcount INTO v_count FROM goods WHERE id = :new.gid; 
    If v_count < :new.gcount Then 
     raise_application_error (-20001,'Low inventory.'); 
    End If; 
END; 
+0

tnx,但是,這段代碼發送錯誤! ORA-04082:新的或舊的引用不允許在表級別觸發器 – Farhad

+0

@Farhad我加了'FOR EACH ROW',現在應該是好的 –

+0

好吧,我添加了這個代碼,但得到錯誤!第3行錯誤:PLS-00103:遇到 – Farhad