设为首页 收藏本站
查看: 670|回复: 0

[经验分享] oracle中自增长列的生成方案

[复制链接]

尚未签到

发表于 2016-7-28 11:13:54 | 显示全部楼层 |阅读模式
  最近遇到一个项目,将数据库sybase转换为oracle,其中一个问题就是原来数据库中使用了许多自增长列,现在一个目的就是只更换数据库而不修改现有代码。无奈之举,就吸能用序列+触发器的方式来代替原来的自增长列。因为项目中的表将近200个,有些表的记录,日增长量就有几万条,最近为了万无一失,决定为原有自增长列的表,分别建序列和触发器,这样自增长列也就没有跳号的情况。但工作量太大,最后决定用过程的方式来加以实现。
  1.序列过程。

CREATE OR REPLACE PROCEDURE p_createseq(tablename VARCHAR2)
AS
strsql VARCHAR2(500);
BEGIN
strsql:='create sequence '||tablename||'_SEQ MINVALUE 1 MAXVALUE 9999999999 START WITH 1 INCREMENT BY 1 CACHE 20 ORDER NOCYCLE';
EXECUTE IMMEDIATE strsql;
END;
  2.触发器过程。  

CREATE OR REPLACE PROCEDURE p_createtr(tablename VARCHAR2,prikeyname VARCHAR2)
AS
strsql VARCHAR2(1000);
BEGIN
strsql:='CREATE OR REPLACE TRIGGER '||tablename||'_TRG'||'
BEFORE INSERT ON '||tablename||' FOR EACH ROW
DECLARE
next_id NUMBER;
BEGIN
SELECT '||tablename||'_SEQ.NEXTVAL INTO next_id FROM dual;
:new.'||prikeyname||':=next_id;
END;';
EXECUTE IMMEDIATE strsql;
END;
  接下来就可以在命令窗口下执行以下语句:

execute p_createseq('BS_CMP_CHECK');
execute p_createtr('BS_CMP_CHECK','CHECK_ID');
......
  这样的话就可以更快速的建立起多个序列和触发器。
  这时候同事提出这样一个想法,觉得这样还是很费时,要实现200张表的自增长列,工作量也很大。每次做系统初始化的时候,都要这样,真是件烦心事。最后为减少工作量,再写一过程(辛苦一个人,幸福一组人):

CREATE OR REPLACE PROCEDURE p_createseqandtri
AS
BEGIN
p_createseq('BS_CMP_CHECK');
p_createtr('BS_CMP_CHECK','CHECK_ID');......
EXCEPTION   
WHEN OTHERS THEN   
DBMS_OUTPUT.PUT_LINE('创建失败......');      
END;
  这样一个过程就可以建完所有的序列和触发器,很爽吧!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-250659-1-1.html 上篇帖子: oracle java 分页的一个包 下篇帖子: MySQL/Oracle/DB2/SQLServer/PostgreSQL等技术
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表