繁体   English   中英

甲骨文-序列依赖于另一列?

[英]Oracle - Sequence dependent on another column?

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

例如:我有一个桌子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

如何才能做到这一点?

如果只需要一个序列号,则可以在查询时生成它:

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

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

添加具有字段ID,MAKE,CAR_NO的CAR_NO_TYPE表

在插入CAR之前添加触发器

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

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

Oracle Sequence不能依赖于表列或与此相关的任何其他内容。

你可以:

1)对每辆汽车制造使用不同的顺序。

2)例如,在数据库触发器中编写特殊逻辑,该逻辑尝试基于MAKE和该MAKE以前使用的最高值来填充CAR_NO。 但是,这在用户同时插入同一MAKE记录的多用户环境中不能很好地工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM