Sql ORA-04044:此处不允许使用过程、函数、包或类型
我正在尝试做一个触发器,该触发器查询DB,以检查在允许交货之前是否已经订购了特定的产品。我不能换桌子。我发现错误:ORA-04044:此处不允许使用过程、函数、包或类型。我不明白这可能意味着什么。我必须检查交付中的条形码是否存在于表product中,以及命令中是否存在product numreference 该表如下: 命令Sql ORA-04044:此处不允许使用过程、函数、包或类型,sql,oracle,Sql,Oracle,我正在尝试做一个触发器,该触发器查询DB,以检查在允许交货之前是否已经订购了特定的产品。我不能换桌子。我发现错误:ORA-04044:此处不允许使用过程、函数、包或类型。我不明白这可能意味着什么。我必须检查交付中的条形码是否存在于表product中,以及命令中是否存在product numreference 该表如下: 命令 -------------------------------------------------------- NUMCOMMAND DATE CLIENTCO
--------------------------------------------------------
NUMCOMMAND DATE CLIENTCODE NUMREFERENCE NUMBERITEMS
----------- -------- ---------- ------------ -----------
53 20-11-21 2 10 5
产品
----------------------------------------------------------------------
BARCODE PRODUCTNUMBER NUMREFERENCE IDCLERK STOCKQUANTITY
---------- -------------------- ------------ ---------- ---------------
1 P001 1 2 10
交付
----------------------------------------------------------------------------------
DELIVERIYNUMBER DATE CLIENTCODE NUMCOMMAND BARCODE ID CLERK DELIVEREDQUANTITY
---------------- ----- ---------- ---------- ------- -------- -----------------
代码如下:
CREATE OR REPLACE TRIGGER productExist
BEFORE INSERT ON DELIVERY
FOR EACH ROW
DECLARE
l_count INTEGER;
BEGIN
select count(*)
into l_count
from C command, L delivery, P product
where C.clientCode = :new.clientCode AND :new.barcode= P.barcode AND C.numreference = P.numreference;
if l_count > 0 then
DBMS_OUTPUT.PUT_LINE('Delivery accepted');
ELSE
RAISE_APPLICATION_ERROR(-20202, 'Delivery declined');
end if;
END;
尝试写以下内容:
from command C, delivery L, product P
我认为表别名位于错误的位置。一旦修复,传递中的每一行都会出现交叉连接-您根本不应该在触发器中引用它(执行时会出现变异表错误)。引用插入行的唯一方法是使用:new记录。