【发布时间】:2016-03-21 16:22:23
【问题描述】:
我在 SQL 中创建了一个触发器,它编译正常,但是当我运行插入它时,我收到以下错误:
SQL Error: ORA-01403: no data found
ORA-06512: at "EOCRIBIN.SHIPMENT_CAPACITY", line 5
ORA-04088: error during execution of trigger 'EOCRIBIN.SHIPMENT_CAPACITY'
01403. 00000 - "no data found"
*Cause: No data was found from the objects.
*Action: There was no data from the objects which may be due to end of fetch.
这里是触发器:
CREATE OR REPLACE TRIGGER Shipment_capacity
BEFORE INSERT or UPDATE on SHIPMENT_TYPE FOR EACH ROW
DECLARE
NOT_ENOUGH_CAPACITY EXCEPTION;
WEIGHT INTEGER;
BEGIN
SELECT VolumeCapacity
INTO WEIGHT
FROM shipment_type
WHERE ShipmentType = :NEW.ShipmentType;
IF WEIGHT > :new.WeightCapacity THEN
RAISE NOT_ENOUGH_CAPACITY;
END IF;
EXCEPTION
WHEN NOT_ENOUGH_CAPACITY THEN
RAISE_APPLICATION_ERROR(-200003,'Volume capacity exceeds weight limit');
END;
该表由以下内容组成:
CREATE TABLE SHIPMENT_TYPE
(
ShipmentType varchar(25) primary key,
VolumeCapacity INT,
WeightCapacity INT,
Temperature float
);
知道为什么会发生此错误吗?
【问题讨论】:
-
你想用你的
select语句完成什么?如果ShipmentType是主键,看起来您只想检查if :new.VolumeCapacity > :new.weightCapacity then。这似乎不是一个特别合理的检查。我猜你真的想查询一个不同的表来比较。 -
认为这确实有效。我正在遵循一个示例,这就是我选择的原因,但这是有道理的欢呼
标签: sql oracle triggers sql-insert sqltransaction