在rails 中使用oracle ,id 自动增长的处理方式

来源:互联网 发布:node throw err 编辑:程序博客网 时间:2024/05/01 06:53

重要:

在使用rails g model 的命令的时候。 连接器会自动建立一个seq 。

seq 的名称  是  <models>_SEQ 

比如: 建立一个 user 的model,按照命名规则,会建立一个 USERS 的表单,那么rails  也会在oracle中自动建立 一个 USERS_SEQ的 sequence。

** 查询 空间中所有的 sequence 可以通过 sql 命令 : select * from all_sequences

不要建立trigger 。rails 的model 继承的 ActiveRecord  会自动 在插入数据的时候,读取这个seq 的nextval 值,并且赋值到 id 字段。


如果,我们没有通过 rails g model 命令建立表单,而是使用已经存在的数据表单的时候,就需要手工建立一个seq,并且遵循这个 命名规范。

CREATE SEQUENCE GIS_REGIONS_SEQINCREMENT BY 1START WITH 1 NOMAXVALUE NOCYCLE CACHE 10;   

命名规范: 其中 GIS_REGION 是rails中的model 名称 ,GIS_REGIONS 是表单名称。


按照这个原理,如果我们没有符合id字段做主键值的规范。那就需要建立一个trigger 来处理了。


create or replace trigger SEQ_ID_FOR_GIS_REGION_TRIGGERbefore insert on GIS_REGIONS for each rowdeclare  next_id number;begin  select SEQ_ID.nextval into next_id from dual;  :new.ID := next_id;end;


同样,也可以 在 ActiveRecord 中 指定 seq 

self.sequence_name = "GIS_SZREGION_SEQ"