【发布时间】:2014-10-02 08:56:37
【问题描述】:
所以我有两张表,一张叫“device”,一张叫“devicerequest”
“设备”表的列包括 id(主键)、名称、数量,基本上有像“(1, iPhone, 3), (2, iPad, 1) 这样的数据,即:id=1 name =iPhone 数量=3。
“devicerequest”表包含 requestid(primary key)、deviceid、devicequantity 等列,并包含类似 (22, 1, 2) 的数据,这意味着它正在请求 2 个 iPhone。
所以基本上我试图在管理员确认请求时创建一个触发器(它们是“devicerequest”中的一个批准列(发出项目请求时为 NULL)并将其设置为“Y”,这意味着对请求,它应该通过减去请求的数字来更改设备中的数量列(它们是一个约束,以确保您不请求 devicequantity > quantity)。
所以我尝试了很多不同的变体,但仍然不断出错,这是我目前拥有的:
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,感谢您提供的任何帮助,我已经为此工作了一段时间,但无法找出问题所在。
【问题讨论】:
标签: oracle plsql triggers oracle-apex