最近遇到一个项目,将数据库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;
这样一个过程就可以建完所有的序列和触发器,很爽吧!
分享到:
相关推荐
oracle自动增长列。 自动序列化, SEQUENCE。
如何为oracle中的表增加自动增长列.pdf
在oracle数据库设置自增长列,使用触发器。
oracle设置主键自动增长 首先,你要有一张表! 然后,你需要一个自定义的sequence 以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle...
oracle数据库中主键属性没有自增长,所以只能自己写程序来实现,用序列与触发器,可以解决这个 问题
在hibernate中实现oracle的自动增长
oracle触发器实现主键自动增长操作
这里所说的自动增长列,主要是指一个表中主键id的自动增长。 Oracle与Mysql不同,不能在CREATE建立表时设置自动增长列功能。 Oracle必须通过创建sequence序列来实现自动增加列的功能。 首先要建立序列(当然必须要先...
在Hibernate中实现Oracle的自动增长,实现了oracle中的触发器功能
oracle数据库id为uuid类型时自动生成id的工具类,不再依赖sequence自增长
在sqlserver中,可以用identity实现自动增长值,但在oracle中,没有identity,可以用其它的实现,这里就是用序列实现的自动增长值。
Oracle自增长主键自动生成类 public static int nextID String table { if table null return 1; table table toLowerCase ; String strKey table; if sequences containsKey strKey { ...
oracle生成拼音码,oracle生成拼音码,oracle生成拼音码,oracle生成拼音码,oracle生成拼音码
完成Java编程过程中数据存储序号自增长。
oracle设置主外键即主键序列自动增长
详细描述了在oracle中创建方案的3种方法,包括利用图形界面和sql语句
oracle创建表时主键自动增长方法 5 测试反复执行如下语句:insert into Test_Increase(Username) values('test')6 查看插入结果:userid username1 test2 test3 test4 test5 test6 test7 test8 test9 test
ORACLE根据某一列的值修改另一列的值
之前介绍过一款PHP的MySQL代码生成器,现在给出全系列的,供各位玩家慢慢去研究吧!...无论是个人学习还是研究,都是一款很不错的工具,尤其是能为Oracle生成高质量的代码,还提供了大量的模板和范例,值得玩味。