重要:
在使用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"