我有一个以冒号分隔的值列表存储在我的Oracle数据库的varchar2
列ORDER_PARTS_LIST
列中。Oracle APEX数据库触发器 - 引用数据库列的问题
(据我所知,在这样的清单存储的数据可能不是最好的做法,但现在只是忽略了这个事实。)
下面是相关的表列:
ORDER_TABLE(
ORDER_NUMBER number,
ORDER_PARTS_LIST varchar(4000))
PARTS_TABLE(
PART_NUMBER varchar(20),
ASSIGNED_ORDER_NUMBER number)
我有一个条件触发:
create or replace trigger "ORDER_PARTS_T1"
BEFORE
insert or update or delete on "ORDER_TABLE"
for each row
begin
if :new.ORDER_PARTS_LIST LIKE '%'+PART_NUMBER+'%' then
update PARTS_TABLE set ASSIGNED_ORDER_NUMBER = :ORDER_NUMBER;
end if;
end;
当我运行这触发我得到以下错误:
PLS-00201: identifier 'PART_NUMBER' must be declared
什么是应该发生的是,这PART_NUMBERs
,在PARTS_TABLE
,包括在ORDER_PARTS_LIST
触发检查,在ORDER_TABLE
,然后插入ORDER_NUMBER
,受影响的行ORDER_TABLE
,进入列,的PARTS_TABLE
。
最后,ORDER中的所有零件应该标记为该ORDER的NUMBER。
这是否有任何意义?
我不确定如何正确地定义这个触发器中的变量,以便它可以运行,并且老实说,我有些怀疑触发器是否会做我认为应该做的事情,即使这些事情有效。任何建议或帮助获得像我已经定义的触发功能应该会很棒。提前致谢。
非常感谢您的先生!像魅力一样工作! – Spags
就像一种跟进...你提到删除,我认为你是正确的,真的没有理由被列入,因为记录可能不会从数据库中删除。然而,有可能PART_NUMBERS在发送进行处理之前可以从订单中删除。如果零件已从订单中删除,是否有更新PARTS_TABLE的简单方法?我需要一个单独的触发器使用OLD和NEW等? – Spags
也许 - 我用一个建议编辑了我的答案。 –