以下是小编整理的实现oracle数据库字段自增长(两种方式),本文共7篇,欢迎阅读分享。

篇1:实现oracle数据库字段自增长(两种方式)
这篇文章主要通过两种方式实现oracle数据库字段自增长,第一种方式是序列+触发器,第二种方式序列+显示调用序列,需要的朋友可以参考下
程序猿都知道mysql等其他的数据库都有随着记录的插入而表ID会自动增长的功能,反而oracle却没有这一功能,下面通过两种方式来解决字段增长的功能,具体内容情况下文,
因为两种方式都需要通过创建序列来实现,这里先给出序列的创建方式。
代码如下:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
解析:
1)INCREMENT BY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
2)START WITH 定义序列的初始值(即产生的第一个值),默认为1。
3)MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
4)MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。
5)CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
6)CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。
解决方式一、序列+触发器
具体实现方式如下:
第一步,创建sequence
代码如下:
-- Create sequence
create sequence SEQ_T_RECV
minvalue 1
maxvalue 9999999
start with 1
increment by 1
cache 50;
第二步,创建表
代码如下:
-- Create table
create table RECV_MSG
(
id NUMBER,
messageid VARCHAR2(32),
contents VARCHAR2,
app_flg VARCHAR2(100),
phonenumber VARCHAR2(2000),
updatetime DATE default sysdate
);
第三步,建立触发器
代码如下:
CREATE OR REPLACE TRIGGER “recv_trig”
BEFORE INSERT ON recv_msg
REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
BEGIN
SELECT SEQ_T_RECV.NEXTVAL INTO :NEW.ID FROM DUAL;
END recv_trig;
第四步,测试并确认
向表中插入一条数据,查看id字段是否自动增长了,
解决方式二、序列+显示调用序列
一、创建sequence
代码如下:
create sequence seq_on_test
increment by 1
start with 1
nomaxvalue
nocycle
nocache;
二、建表
代码如下:
--建表
drop table test;
create table test(
ID integer
,stu_name nvarchar2(4)
,stu_age number
);
三、插入数据(显示调用序列的下一个值插入)
代码如下:
--插入数据
insert into test values(seq_on_test.nextval,‘Mary‘,15);
insert into test values(seq_on_test.nextval,‘Tom‘,16);
四、查看
代码如下:
select * from test;
--结果
/*
1 Mary 15
2 Tom 16
*/
附带:查看序列当前值和下一个值的查看方式
代码如下:
--seq的两个方法
select seq_on_test.currval from dual;
select seq_on_test.nextval from dual;
--结果
/*
2
3
*/
篇2:两种oracle创建字段自增长的实现方式
作者:WhyWin 字体:[增加 减小] 类型:
这篇文章介绍了两种oracle创建字段自增长的实现方式,一是序列+触发器,二是序列+显示调用序列,需要的朋友可以参考下
mysql等其他数据库中有随着记录的插入而表ID自动增长的功能,而oracle却没有这样的功能,我们有以下两种方式可以解决字段自增长的功能,
因为两种方式都需要通过创建序列来实现,这里先给出序列的创建方式。
CREATE SEQUENCE 序列名[INCREMENT BY n][START WITH n][{MAXVALUE/ MINVALUE n|NOMAXVALUE}][{CYCLE|NOCYCLE}][{CACHE n|NOCACHE}];
解析:
1)INCREMENT BY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
2)START WITH 定义序列的初始值(即产生的第一个值),默认为1。
3)MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
4)MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。
5)CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
6)CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。
解决方式一、序列+触发器
具体实现方式如下:
第一步,创建sequence
-- Create sequencecreate sequence SEQ_T_RECVminvalue 1maxvalue 9999999start with 1increment by 1cache 50;
第二步,创建表
-- Create tablecreate table RECV_MSG( id NUMBER, messageid VARCHAR2(32), contents VARCHAR2(2000), app_flg VARCHAR2(100), phonenumber VARCHAR2(2000), updatetime DATE default sysdate);
第三步,建立触发器
CREATE OR REPLACE TRIGGER “recv_trig” BEFORE INSERT ON recv_msg REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROWDECLAREBEGIN SELECT SEQ_T_RECV.NEXTVAL INTO :NEW.ID FROM DUAL;END recv_trig;
第四步,测试并确认
向表中插入一条数据,查看id字段是否自动增长了,
解决方式二、序列+显示调用序列
一、创建sequence
create sequence seq_on_test increment by 1 start with 1 nomaxvalue nocycle nocache;
二、建表
--建表 drop table test; create table test( ID integer ,stu_name nvarchar2(4) ,stu_age number );
三、插入数据(显示调用序列的下一个值插入)
--插入数据 insert into test values(seq_on_test.nextval,‘Mary‘,15); insert into test values(seq_on_test.nextval,‘Tom‘,16);
四、查看
select * from test; --结果 /* 1 Mary 15 2 Tom 16 */
附带:查看序列当前值和下一个值的查看方式
--seq的两个方法 select seq_on_test.currval from dual; select seq_on_test.nextval from dual; --结果 /* 2 3 */
总结
通过触发器直接添加的方式比显示调用方便一下,我们不需要哪个字段要通过哪个序列还获取下一个值,而通过触发器进行执行的添加。
以上就是本文的全部内容,希望对大家掌握两种oracle创建字段自增长的实现方式有所帮助。
篇3:实现Oracle数据库复制数据库
我们经常希望把各地的数据入库后进行统一的应用,现在可以用复制技术来解决这个问题。但实现数据库复制也是要有一些条件的。 首先,数据库要具备高级复制功能(用system身份登录数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复
我们经常希望把各地的数据入库后进行统一的应用。现在可以用复制技术来解决这个问题。但实现数据库复制也是要有一些条件的。
首先,数据库要具备高级复制功能(用system身份登录数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持)。
如果具备高级复制功能,数据库要进行一些参数初始化。
db_domain = test.com.cn 指明数据库的域名(默认的是WORLD),这里可以用您公司的域名;global_names = true 它要求数据库链接(database link)和被连接的数据库名称一致,现在全局数据库名:db_name+”.”+db_domain ;
跟数据库job执行有关的参数:
job_queue_processes = 1;
job_queue_interval = 60;
distributed_transactions = 10;
open_links = 4
第一行定义SNP进程的启动个数为n。系统缺省值为0,正常定义范围为0~36,根据任务的多少,可以配置不同的数值。第二行定义系统每隔N秒唤醒该进程一次。系统缺省值为60秒,正常范围为1~3600秒。事实上,该进程执行完当前任务后,就进入睡眠状态,睡眠一段时间后,由系统的总控负责将其唤醒。如果修改了以上这几个参数,需要重新启动数据库以使参数生效。
做完了初步的准备,我们来实现数据库同步复制。
假设在Inte.net上有两个数据库:一个叫中国(China),一个叫日本(Japan)。
具体配置如下:
数据库名:China、Japan
数据库域名 test.com.cn
数据库sid号 China、Japan
Listener端口号 1521
服务器ip地址 10.1.0.100 10.1.0.200
确认两个数据库之间可以互相访问,在tnsnames.ora里设置数据库连接字符串。
中国这边的数据库连接字符串是以下的格式:
Japan =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.200)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = Japan)
)
)
运行$tnsping Japan,出现以下提示符:
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521))
OK(n毫秒)
表明中国数据库可以访问日本数据库。在日本那边也同样配置,确认$tnsping China 是通的。
改数据库全局名称,建公共的数据库链接。
用system身份登录China数据库
SQL>alter database rename global_name to China.test.com.cn;
用system身份登录Japan数据库:
SQL>alter database rename global_name to Japan.test.com.cn;
用system身份登录China数据库。
SQL>create public database link Japan.test.com.cn using 'Japan';
测试数据库全局名称和公共的数据库链接。
SQL>select * from global_name@Japan.test.com.cn;
返回结果为Japan.test.com.cn就对了。
用system身份登录Japan数据库:
SQL>create public database link China.test.com.cn using 'China';
测试数据库全局名称和公共的数据库链接。
SQL>select * from global_name@China.test.com.cn;
返回结果为China.test.com.cn就对了。
建立管理数据库复制的用户repadmin,并赋权,
用system身份登录China数据库:
SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace temp;
SQL>execute dbms_defer_sys.register_propagator('repadmin');
SQL>grantexecute any procedure to repadmin;
SQL>execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
SQL>grant comment any table to repadmin;
SQL>grant lock any table to repadmin;
同样用system身份登录Japan数据库,运行以上的命令,管理数据库复制的用户repadmin,并赋权。
在数据库复制的用户repadmin下创建私有的数据库链接。
用repadmin身份登录China数据库。
SQL>create database link Japan.test.com.cn connect to repadmin identified
在Japan数据库那边同样运行以上①,②,③。
在Japan数据库scott用户下创建主关键字的序列号,范围避免和China的冲突。
SQL> create sequence dept_no increment by 1 start with 45 maxvalue 99 cycle nocache;
在Japan数据库scott用户下插入初始化数据。
SQL>insert into dept values (dept_no.nextval,'sales','chicago');
SQL>insert into dept values (dept_no.nextval,'operations','boston');
SQL>commit;
创建要复制的组scott_mg,加入数据库对象,产生对象的复制支持。
用repadmin身份登录China数据库,创建主复制组scott_mg:
SQL> execute dbms_repcat.create_master_repgroup('scott_mg');
在复制组scott_mg里加入数据库对象:
SQL>execute dbms_repcat.create_master_repobject(sname=>'scott',oname=>'dept', type=>'table',use_existing_object=>true,gname=>'scott_mg');
参数说明:
sname 实现数据库复制的用户名称;
oname 实现数据库复制的数据库对象名称;
type 实现数据库复制的数据库对象类别;
use_existing_object true表示用主复制节点已经存在的数据库对象;
gname 主复制组名;
对数据库对象产生复制支持:
SQL>execute dbms_repcat.generate_replication_support('scott','dept','table');
确认复制的组和对象已经加入数据库的数据字典:
SQL>select gname, master, status from dba_repgroup;
SQL>select * from dba_repobject;
创建主复制节点:
用repadmin身份登录China数据库,创建主复制节点:
SQL>execute dbms_repcat.add_master_database
(gname=>'scott_mg',master=>'Japan.test.com.cn', use_existing_objects=>true, copy_rows=>false, propagation_mode => 'asynchronous');
参数说明:
gname 主复制组名;
master 加入主复制节点的另一个数据库;
use_existing_object true表示用主复制节点已经存在的数据库对象;
copy_rows false表示第一次开始复制时不用和主复制节点保持一致;
propagation_mode 异步地执行;
确认复制的任务队列已经加入数据库的数据字典:
SQL>select * from user_jobs;
使同步组的状态由停顿(quiesced )改为正常(normal):
用repa
原文转自:www.ltesting.net
篇4:企业实现利润增长方式
企业实现利润增长方式
当企业经营一个产品或者一个产业时,有可能还运作自如,但是想要实现利润的增长却很难,对于每个公司及其高层领导人来讲,选择进入、保持或退出某项业务是最艰难的问题。到底要进入哪个领域?是否要砍掉某些业务?目前的产品都值得投入么?
企业利润的增长作为首要考虑的问题,应建立在核心业务基础上,核心业务的基本特点是:
1、市场份额处于领先地位
2、产品盈利能力较强,有好的盈利模式,并且这种盈利模式并不容易被复制
3、具有较强的抗竞争能力,消费者对产品忠诚度很高
4、能提高企业综合能力,稳固财务基础
企业只有确定核心业务后,才可以考虑如何进行其他投资,尽量在中短期内将非核心业务变为核心业务。比如企业有四个不同产品,ABCD。A是盈利较强的核心业务,但是未来尚不明了;BC还未见到明显的利润增长痕迹,并已经进行了大量的人力物力投入;D有小额的利润,但市场份额可能越来越小,
实际上这种境况是非常危险的,稍有不慎,企业的资金链就有可能断裂,进入到恶性循环中。在这时,企业需要投入调研的精力,确定A业务的市场空间到底还有多少?竞争对手的动向如何?有哪些市场空白点可以挖掘?在确定这几个问题之后,集中人员单点突破,根据情况撤走部分人员,集中开发新项目。
对于BC两项业务,企业需要理清一个问题,两项业务是否适应未来发展需求,很多企业都认为自己选择的产品组合在未来肯定会有更大的发展空间,但是不知道会有多久,而企业现在却必须实现赢利,公司才能够正常运转。在这种情况下,寻求“下嫁”是不错的发展方式。与资金强大或者有渠道优势的企业合作,是一种便捷的成功方法。
五粮液的保健酒发展了很多年一直没有任何起色,五粮液与史玉柱合作,开发出五粮液黄金酒。实际上五粮液是借用了史玉柱在全国几千个终端的渠道优势和史玉柱式的营销模式。借船出海也是可以打捞到大鱼的,虽然要与别人分享,但是相对于自己含辛茹苦带着风险的培育市场,“下嫁”绝对值得。
现在,由于市场开放,企业间的重组并购异常火爆,需要注意的是,进行非相关产业多元化扩张的企业必须认识到其业务性质与风险投资公司非常相似,企业需要有业务组合的选择,而不仅仅在一两个业务下 。大多数项目将达不到所期望的回报,由于失败的业务经营造成资本和人力资源的浪费和闲置,尽早认清和退出失败业务将是至关重要的。
最重要的是,不要将决定建立在偶然性冒险或直觉判断的基础上。必须严格衡量分析现有业务组合和新业务机会,并且对它们实施积极主动的管理和控制。
篇5:简单实现栅格布局的两种方式
本文给大家介绍的是2种栅格布局的简单实现方式,并附上示例代码,非常实用,这里推荐给大家,有需要的小伙伴参考下吧,
一、使用float:
代码如下:
二、使用display:flex(这个css3属性仅谷歌和火狐支持)
代码如下:
实现效果如图所示:
当然使用table和负边距也是可以实现的,有时间补上:-D
以上就是本文所述的全部内容了,希望大家能够喜欢,
篇6:Oracle数据库的几种启动和关闭方式
有以下几种启动方式:
1、startup nomount
非安装启动,这种方式启动下可执行:重建控制文件、重建数据库
读取init.ora文件,启动instance,即启动sga和后台进程,这种启动只需要init.ora文件。
2、startup mount dbname
安装启动,这种方式启动下可执行:
数据库日志归档、
数据库介质恢复、
使数据文件联机或脱机、
重新定位数据文件、重做日志文件。
执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置,
但此时不对数据文件和日志文件进行校验检查。
3、startup open dbname
先执行“nomount”,然后执行“mount”,再打开包括redo log文件在内的所有数据库文件,
这种方式下可访问数据库中的数据。
4、startup,等于以下三个命令
startup nomount
alter database mount
alter database open
5、startup restrict
约束方式启动
这种方式能够启动数据库,但只允许具有一定特权的用户访问
非特权用户访问时,会出现以下提示:
error:
ora-01035: oracle 只允许具有 restricted session 权限的用户使用6、startup force
强制启动方式
当不能关闭数据库时,可以用startup force来完成数据库的关闭
先关闭数据库,再执行正常启动数据库命令
6、startup pfile=参数文件名
带初始化参数文件的启动方式
先读取参数文件,再按参数文件中的设置启动数据库
例:startup pfile=e:oracleadminoradbpfileinit.ora
7、startup exclusive
有三种启动方式:
1、shutdown normal
正常方式关闭数据库。
2、shutdown immediate
立即方式关闭数据库。
在svrmgrl中执行shutdown immediate,数据库并不立即关闭,
而是在oracle执行某些清除工作后才关闭(终止会话、释放会话资源),
当使用shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。
3、shutdown abort
直接关闭数据库,正在访问数据库的会话会被突然终止,
如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间。
篇7:如何实现对数据库单个字段进行加密数据库教程
加密|数据|数据库
create view v_rand
as
select c=unicode(cast(round(rand()*255,0) as tinyint))
go
create function f_jmstr(@str varchar(8000),@type bit)returns varchar(8000)
/*
*参数说明
*str:要加密的字符串或已经加密后的字符
*type:操作类型--0加密--解密
*返回值说明
*当操作类型为加密时(type--0):返回为加密后的str,即存放于数据库中的字符串
*当操作类型为解密时(type--1):返回为实际字符串,即加密字符串解密后的原来字符串
*/
As
begin
declare @re varchar(8000)--返回值
declare @c int--加密字符
declare @i int
/*
*加密方法为原字符异或一个随机ASCII字符
*/
if @type=0--加密
begin
select @c=c,@re='',@i=len(@str) from v_rand
while @i>0
select @re=nchar(unicode(substring(@str,@i,1))^@c^@i)+@re
,@i=@i-1
set @re=@re+nchar(@c)
end
else--解密
begin
select @i=len(@str)-1,@c=unicode(substring(@str,@i+1,1)),@re=''
while @i>0
select @re=nchar(unicode(substring(@str,@i,1))^@c^@i)+@re ,@i=@i-1
end
return(@re)
end
go
--测试
declare @tempstr varchar(20)
set @tempstr=' 1 2 3aA'
select dbo.f_jmstr(dbo.f_jmstr(@tempstr,0),1)
输出结果
1 2 3aA
(完)
★如何在Oracle 中实现类似自动增加 ID 的功能?数据库教程
★sybase数据库中numeric数据类型字段出现跳号的问题
文档为doc格式