Oracle - 序列依赖于另一列?

时间:2016-06-06 19:07:19

标签: sql oracle sequence

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

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

如何做到这一点?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

添加一个CAR_NO_TYPE表,其中包含字段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;

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

答案 2 :(得分:0)

Oracle Sequence不能依赖于表格列或其他任何内容。

你可以:

1)对每辆车的MAKE使用不同的序列。

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