【发布时间】:2017-04-05 17:47:38
【问题描述】:
我正在制作一个触发器,检查一个人是否可以参加世界锦标赛或欧洲锦标赛,如果他们开车,计算他们在燃料上的花费(燃料成本 * 花费 * 距离/100)。我需要将该信息放在另一个表中,但我收到此消息:
Error(24,66): PL/SQL: ORA-00984: column not allowed here
那是因为我在代码底部的 INSERT 语句中添加了“fuelcost * 花 * :new.distance/100”。我的问题是,我怎样才能以某种不同的方式将该值计入餐桌成本。列 cost.money 不是计算列,因为它不仅仅是该表中的燃料成本,因此这不是解决方案。
CREATE OR REPLACE TRIGGER check_norm_fuel_cost
INSTEAD OF INSERT OR UPDATE ON insert_travel_view
FOR EACH ROW
DECLARE
hasnorm char(1);
spends number;
fuelcost number;
BEGIN
SELECT norms.norm INTO hasnorm
FROM norms JOIN competitions
ON competitions.competitionID=norms.competitionID
WHERE :new.personID = norms.personID
AND (competitions.name LIKE 'European championship'
OR competitions.name LIKE 'World championship');
IF hasnorm = 'Y' OR hasnorm IS NULL THEN
INSERT INTO travel(travelID, personID, competitionID, vehicleID, distance)
VALUES (:new.travelID, :new.personID, :new.competitionID, :new.vehicleID, :new.distance);
IF :new.distance IS NOT NULL THEN
SELECT vehicles.consumption INTO spends FROM vehicles
WHERE :new.vehicleID = vehicles.vehicleID;
SELECT fuels.cost INTO fuelcost FROM fuels JOIN vehicles ON vehicles.fuelID = fuels.fuelID
WHERE :new.vehicleID = vehicles.vehicleID;
INSERT INTO COSTS(costID, costtype, travelID, money)
VALUES(35, 'fuel', :new.travelID, fuelcost*spends*:new.distance/100);
END IF;
END IF;
END;
【问题讨论】:
-
计算中的
distance是否应该是:new.distance的最终插入? -
是的,但它不能解决这个错误。我认为 INSERT 无法在 VALUES EDIT 中得到算术表达式的问题:我编辑了有问题的代码。
-
这就是问题所在,尽管您还有另外两个问题 - 添加
:new:时错误消息是否更改? -
不,很遗憾,还是一样。如果它只是:新。我可能会自己得到它。你说的还有哪两个问题?
-
values列表中的表达式完全正常,它们不是错误的原因。
标签: sql plsql oracle11g oracle-sqldeveloper