Oracle - 序列依赖于另一列?

Oracle - Sequence dependent on another column?

如何创建依赖于另一列的序列?

例如: 我有一个 table CAR

MAKE  | CAR_NO | COLOR | MODEL
_____________________________
Honda   1        S      Civic
Honda   2        B      Civic
Honda   3        W      Civic
Toyota  1        S      Camry
Toyota  2        B      Camry
Mazda   1        W      3

所以 CAR_NO 是序列,它依赖于列 MAKE

如何做到这一点?

序列不是执行此操作的唯一方法。这对我来说看起来像是业务逻辑,应该封装在 table 中以保存值,以便您可以根据需要更改它们。

添加 CAR_NO_TYPE 的 table,字段 ID、MAKE、CAR_NO

在插入 CAR 之前添加触发器

select CAR_NO into v_car_no from CAR_NO_TYPE where MAKE = :new.MAKE;
:new.CAR_NO := v_car_no;

或者,更好的方法是让您的应用程序通过在插入之前执行查询来处理此业务逻辑。

Oracle Sequence 不能依赖于 table 列或任何其他相关内容。

你可以:

1) 对每个品牌的汽车使用不同的序列。

2) 在数据库触发器中编写特殊逻辑,例如,尝试根据 MA​​KE 和该 MAKE 先前使用的最高值填充 CAR_NO。但是,这在用户同时插入同一 MAKE 的记录的多用户环境中效果不佳。

如果你只是需要一个序号,那么你可以在查询的时候生成:

select t.*, row_number() over (partition by make order by make) as seqnum
from t;