2015-06-27 86 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