尝试创建一个触发器来在更改另一个表中的值时更新表(oracle apex)

美国编码团队-替补

所以我有两个表,一个叫“ device”,另一个叫“ devicerequest”

“设备”表具有包括id(主键),名称,数量的列,并且基本上具有“(1,iPhone,3),(2,iPad,1)之类的数据,它表示:id = 1 name = iPhone数量= 3。

“ devicerequest”表具有包括requestid(主键),deviceid,devicequantity的列,并具有类似(22、1、2)的数据,这意味着它正在请求2部iPhone。

因此,基本上,我试图在管理员确认请求时创建触发器(它们在“ devicerequest”中为批准列(当进行projectrequest时为NULL)并将其设置为“ Y”,这意味着对请求是,应该通过减去请求的数量来更改设备中的数量列(它们是适当的约束,以确保您不请求设备数量>数量)。

因此,我尝试了很多不同的方法,但仍然不断出错,这就是我目前所拥有的:

create or replace trigger "DEVICEREQUEST_T1"
before update on "DEVICEREQUEST"
for each row  

begin

if(:NEW.approval = 'Y')
then 
update device set device.quantity = device.quantity - devicerequest.devicequantity
where device.id = devicerequest.deviceid;

end if;
end;

我得到这些错误:

6 23 PL / SQL:ORA-00904:“ DEVICEREQUEST”。“ DEVICEID”:无效的标识符

5 5 PL / SQL:忽略了SQL语句

我也尝试过这个:

create or replace trigger "DEVICEREQUEST_QUANTITY"
BEFORE
update of "APPROVAL" on "DEVICEREQUEST"
for each row
when (NEW.approval = 'Y')
begin
update device set quantity = quantity - devicequantity where id = deviceid;
end;​

我得到这些错误:

2 67 PL / SQL:ORA-00904:“ DEVICEID”:无效的标识符

2 1 PL / SQL:忽略了SQL语句

我使用的是Oracle Application Express 4.2.5,感谢我一段时间以来一直在提供的各种帮助,但无法弄清楚出了什么问题。

贾斯汀洞穴

您的UPDATE声明将类似于

update device 
   set device.quantity = device.quantity - :new.devicequantity
 where device.id = :new.deviceid;

当然,在实际系统中,如果管理员可以并行批准请求,则可以很容易地想到会导致quantity降至0以下的情况。

您说您有一个约束来防止devicequantity超过,quantity但是您不能有一个约束来比较表之间的数据。您可以有一个执行该验证的触发器。如果是这样,您的触发器很可能在多用户环境中不足以强制执行您期望其执行的约束。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建一个触发器来更新另一个表的列

如何创建一个SQL触发器来更新另一个表时更新一个表上的日期字段

Oracle Apex:在另一个项目更改时刷新项目

如何查询表并将数据从另一个模式拉入 Oracle APEX 应用程序?

是否可以从apex中的另一个应用程序获取apex集合

创建 SQL 触发器以更新另一个表时出错

使用触发器基于另一个表的特定值来更新一个表中的特定值

在另一个表中创建或更新记录的触发器

Oracle触发器不会在另一个表中插入值

如何在更新一行以更新另一个表时创建触发器

如何创建一个页面来更改登录密码?(甲骨文 APEX 21.1)

Oracle APEX ARP进程不是仅由于另一个进程失败而执行吗?

#符号可防止数据从一个表单页面转到另一个Oracle APEX

创建触发器:通过将数据插入另一个表行来更新表列

如何将 SQL 查询中一个字段的值用于 Oracle Apex 上另一个字段的值列表?

为 SUM 表创建触发器并插入到另一个表中

触发器根据第一个表的输入更新另一个表的值

更新mysql触发器时更新另一个表

是否可以创建触发器以在Oracle中的另一个表上插入表的数据?

ORACLE:创建将数据插入另一个表的触发器

Oracle触发器插入/更新到另一个表

如何使用另一个字段的值对 Oracle Apex 表单中的字段中的默认值进行 sql 查询?

插入后创建触发器,以更新另一个表

使用嵌套表时如何避免在触发器中更改表,以及如何更新到另一个表?

当列在另一个触发器中更改时,ORACLE“更新前”触发器不会触发

数据库触发器-当更新的行中的字段等于三个值之一时,更新另一个表

Oracle APEX用户表

如何创建一个 MySQL 触发器,用于在插入或更新后使用另一个表中字段的数据更新表的总和

如何编写触发器以更新另一个表中的行?