首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在my Rails-4 App的PL-SQL中设置一个特定的数字作为Next ID,并在创建Next记录时将其继续用作主键?

如何在my Rails-4 App的PL-SQL中设置一个特定的数字作为Next ID,并在创建Next记录时将其继续用作主键?
EN

Stack Overflow用户
提问于 2016-01-05 16:00:29
回答 1查看 54关注 0票数 0

如果我的问题标题不清楚,让我详细介绍一下:在我的rails应用程序中,在本地(开发)中,我使用PL-SQL作为我的数据库,并且有一个Customer表,主ID从1,2,3.......so开始。直到我开始在本地(开发)和生产中使用相同的数据库,在创建客户时没有问题,所以在我开始运行本地(开发)和生产与相同的数据库并行后,许多时候客户创建失败,因为ID试图创建为副本。那么,我如何在Local/Production中设置,将ID的下一个索引更改为另一个数字,以避免此冲突。?

例如:我想在本地继续使用(1,2.....etc) ID &在生产中,我想从50000开始设置下一个Id,从wards和continue开始。

EN

回答 1

Stack Overflow用户

发布于 2016-01-05 16:23:37

如果我正确理解了您的问题,您的开发环境和实时环境都链接到相同的数据库和表(假设表名为customer_tab,主id列为cus_id)。

虽然这不是非常推荐的做法,但是如果您想让主id按顺序排列,而不管插入来自哪里(live或dev),那么您可以使用序列和触发器。也就是说,insert语句不会插入主id,而是将其保留为空。但是,在插入时,将运行使用序列号的触发器。如下所示:

代码语言:javascript
复制
/*Create sequence*/
create sequence customer_tab_seq
start with 5000
increment by 1;

/*Create trigger*/
CREATE OR REPLACE TRIGGER customer_tab_tri
BEFORE INSERT ON customer_tab
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF INSERTING THEN
IF :NEW.cus_id IS NULL THEN
SELECT customer_tab_seq.NEXTVAL INTO :NEW.cus_id FROM DUAL;
END IF;
END IF;
END;
/

在这种情况下,插入的第一行将被赋予5000 (不管它来自live还是dev),第二行将被赋予5001 (无论它来自live还是dev)。而且它还能帮你避免将来的冲突。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34606749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档