[英]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.