当前位置:  数据库>oracle

Oracle用触发器实现插入数据主键自增

    来源: 互联网  发布时间:2017-04-03

    本文导语: 一篇:首先,你要有一张表!  CREATE TABLE example (      ID Number(4) NOT NULL PRIMARY KEY,      NAME VARCHAR(25),      PHONE VARCHAR(10),     ADDRESS VARCHAR(50) );   然后,你需要一个自定义的sequence  CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- ...

一篇:首先,你要有一张表!

 CREATE TABLE example

(

     ID Number(4) NOT NULL PRIMARY KEY,

     NAME VARCHAR(25),

     PHONE VARCHAR(10),

    ADDRESS VARCHAR(50)

);

 

然后,你需要一个自定义的sequence 

CREATE SEQUENCE emp_sequence

INCREMENT BY 1 -- 每次加几个

START WITH 1 -- 从1开始计数

NOMAXVALUE -- 不设置最大值

NOCYCLE -- 一直累加,不循环

NOCACHE -- 不建缓冲区

以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或Oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)

你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:

CREATE TRIGGER "触发器名称" BEFORE

INSERT ON example FOR EACH ROW WHEN (new.id is null)

begin

        select emp_sequence.nextval into: new.id from dual;

end;

打完收工!下面你就试试插入数据吧!

另一篇:

学oracle不久,在建表时发现这样一个问题,比如我现在创建一个表:student

create table STUDENT

(

       ID NUMBER not null,

       NAME VARCHAR2(20) default '男',

       SEX VARCHAR2(4),

       ADDRESS VARCHAR2(40),

       MEMO VARCHAR2(60)

)

现在我想实现每插入一条数据,就让id自动增长1.在SQLSERVER中这个很好实现,但在oracle中我搞了半天,查了下资料发现要用到“序列(sequence)”,“触发器”的知识。

首先,创建一个序列:

create sequence STU

minvalue 1

maxvalue 999999999999

start with 21

increment by 1

cache 20;

然后,给表student创建一个触发器:

create or replace trigger stu_tr

before insert on student

for each row

declare

-- local variables here

begin

        select stu.nextval into :new.id from dual;

end stu_tr;

*******************************************************************************************************************************

下面用一个例子来说明自增主键的创建:

1、建用户数据表

drop table dectuser;

create table dectuser(

            userid integer primary key, /*主键,自动增加*/

            name varchar2(20),

            sex varchar2(2)

);

2、创建自动增长序列

drop sequence dectuser_tb_seq;

create sequence dectuser_tb_seq

minvalue 1

maxvalue 99999999

increment by 1

start with 1; /*步长为1*/

3、创建触发器

create or replace trigger dectuser_tb_tri

before insert on dectuser   /*触发条件:当向表dectuser执行插入操作时触发此触发器*/ for each row   /*对每一行都检测是否触发*/

begin  /*触发器开始*/

        select dectuser_tb_seq.nextval into :new.userid from dual; /*触发器主题内  容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中*/

end; /*退出sqlplus行编辑*/

4、提交 commit;

现在就完成了自增主键的设定,搞定!可以检测一下。

insert into dectuser(name,sex) values ('wang','女');

****************************************************************************************************

总的来说,通过在insert操作之前,添加一个触发器,将序列的值放到了将要插入的数据的ID中。

所以,需要 建表->建序列->建触发器 这样一个过程。

我觉得有几个要注意的

一是主键类型为 INT型比较好。

二是触发器主题内容中,select...into 后面的冒号不能掉了。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我从JSP页将数据插入到oracle数据库中,为何汉字插入后数据库中显示为乱码呢?
  • ejb的bmp向oracle表插入图片记录的问题!
  • 从jsp想oracle插入记录的顺序问题
  • 不能把几百个以上的汉字插入oracle varchar2类型的问题!
  • Oracle插入日期数据常见的2个问题和解决方法
  • 向Oracle数据库的CLOB属性插入数据报字符串过长错误
  • 快疯了:怎样从JSP中向Oracle_816中插入LONG型字符串?
  • 在Oracle中向视图中插入数据的方法
  • Oracle 插入超4000字节的CLOB字段的处理方法
  • 在oracle下要在同一事务下插入多条记录,该怎么做??最好要有原代码
  • 请问在jsp中将系统当前时间插入到Oracle中Date字段中?(很急,在线等待)
  • 我要向oracle中插入大文本,用的是lang类型的字段,但是只能插3000字,再多就抱错,说我字符串过长。谁遇到过此问题?
  • 有关java.sql.ResultSet 利用SetDate往 oracle 中插入时间和日期的问题!!
  • 用jsp连上oracle后,在JSP中用(INSERT)插入中文数据后,显示乱码,有办法吗?
  • Oracle中如何插入特殊字符:& 和 '(多种解决方案)
  • Oracle千万条记录插入与查询小结
  • 小妹求教!!关于jsp操作oracle数据库操作的问题(文件读取,插入数据库表相应字段中)
  • Oracle中插入特殊字符:&和'的解决方法汇总
  • jsp向oracle数据库插入图片出错!急!为什么?
  • Oracle跨数据库查询并插入实现原理及代码
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3