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

重要:

在使用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_SEQ
INCREMENT BY 1
START WITH 1 
NOMAXVALUE 
NOCYCLE 
CACHE 10;   

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


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


create or replace trigger SEQ_ID_FOR_GIS_REGION_TRIGGER
before insert on GIS_REGIONS for each row
declare
  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"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值