SQL 触发器编译但出现错误

标签 sql oracle triggers sql-insert sqltransaction

我在 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
);

知道为什么会发生这个错误吗?

最佳答案

我认为您的选择查询没有返回任何内容。您可以使用

捕获异常
WHEN NO_DATA_FOUND THEN
     --whatever you want to do when the error appear
END;

关于SQL 触发器编译但出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34296654/

相关文章:

SQL查询以获取具有子记录列表的父表的记录

sql - 如何选择所需的记录?

node.js - 执行存储过程时出现node-oracledb错误NJS-012

sql - 数据库触发器 : comparison of column value with empty variable

mysql - 需要一些关于 MySQL 存储过程、函数和触发器的想法

php - 是否在 MySQL 中创建触发器(通过 PHP)?

SQL查询获取字段值分布

sql - 与所有列进行比较

oracle - 在不同的模式中执行 sql 脚本

mysql - 迁移oracle到mysql