oracle利用触发器实现自增列

oracle没有自增列功能,mysql 和 sqlserver 分别用auto_increment和identity(1,1)来实现自增。oracle要实现只能通过序列实现,每次插入的时候通过取序列的值显示的给自增列,感觉有些不方便,这里使用触发器来代替,从而使插入的时候三者数据库在语法上一致,便于DAO代码的移植。下面是ORACLE实现示例,步骤如下:
                                                                                                                                      

1、创建表

create tabletest_user(

user_id   number(10,0) primary key,

user_name varchar2(40)

);

2、创建序列

create sequencetest_user_seq start with 1 maxvalue 9999999999 increment by 1;

3、创建触发器

create or replace

triggertest_user_trigger

before insert ontest_user

for each row

begin

selecttest_user_seq.nextval into :new.user_id from dual;

end ;

4、插入数据

insert intotest_user(user_name) values(‘tom‘);

insert intotest_user(user_name) values(‘jack‘);

5、测试结果

select * from test_user;

时间: 2024-10-13 06:22:12

oracle利用触发器实现自增列的相关文章

postgres中通过触发器实现自增列

对于自增列,SQLServer中有identity属性.MySQL中有auto_increment 对于postgresql中,应该如何实现呢? postgresql的manual给了serial类型 CREATE TABLE tablename1 ( colname SERIAL ); 或者 CREATE SEQUENCE tablename2_colname_seq; CREATE TABLE tablename2 ( colname integer NOT NULL DEFAULT nex

Oracle利用触发器更新插入时某一列的值

先创建一个表Brzl 其中Pym是Brxm的首字母拼音 新建触发器前简单备注下触发器创建方法 create [or replace] tigger 触发器名 触发时间 触发事件 on 表名 [for each row] begin pl/sql语句 end 其中: 触发器名:触发器对象的名称.由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途. 触发时间:指明触发器何时执行,该值可取: before:表示在数据库动作之前触发器执行; after:表示在数据库动作之后触发器执行.

oracle 利用函数实现多行一列数据合并效果

/* Formatted on 2013-1-11 13:23:55 (QP5 v5.185.11230.41888) */ CREATE OR REPLACE FUNCTION GetGiftsName (rid  in number)//rid 穿的参数    RETURN VARCHAR2  AS     STR   VARCHAR2 (1000);                                           /*返回的数据集*/  BEGIN     DECLAR

程矢Oracle PowerDesigner中生成Oracle版本主键和自增列

Oracle中如何新建自增列,总的来说需要建立序列,并把这个序列付给某一列,重建触发器即可. 第一步,打开PD,新建一个PDM文档,然后新建一个表,如图所示: 第二步,创建一个序列.在[Model]-[Sequence]打开序列列表窗口,新建一个序列.然后打开序列的属性设置项[physical Options],进行如下设置,点击确定,序列建立完毕. 第三步,将刚刚创建的序列应用到表的主键列中,如图所示:点击确定, 点击确定,至此,自动创建了一个触发器,把序列的值添加到主键中.

Oracle自增列创建方法

最近在做Oracle的项目,由于以前没有接触过Oracle的开发,遇到了不少的问题,比如给Oracle表添加自增列,与SQL Server就不同. Oracle没有自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现. 先建一个测试表了: create table userlogin( id   number(6) not null, name   varchar2(30)   not null primary key ) tablespace users /

Oracle动态创建时间分区,以及Oracle12c中快速创建自增列

时间分区可以按照年月日时分秒进行分区,一般按照日或月分区就足够了,这里按照的是日分区 demo如下 create table APDEMO ( OID NUMBER(38) generated as identity (start with 1 increment by 1),--主键,自增列 REPORTTIME DATE , AP_MAC VARCHAR2(64 CHAR) , APALIASNAME VARCHAR2(128 CHAR) not null, HOTSPOTNAME VARC

Oracle数据库——触发器的创建与应用

一.涉及内容 1.理解触发器的概念.作用和类型. 2.练习触发器的创建和使用. 二.具体操作 (实验) 1.利用触发器对在scott.emp表上执行的DML操作进行安全性检查,只有scott用户登录数据库后才能向该表中执行DML操作.(第1题中,user是系统函数,返回当前用户.字符串中使用两个单引号表示一个单引号.) 要求:分别以system用户和scott用户对emp 表执行DML操作,试验触发器的运行效果. (1)在scott用户下创建触发器 语句: create or replace t

Oracle数据库主键自增

Oracle数据库主键自增 在学习mysql时,我们很容易通过auto_increment就能实现主键自增的功能,但是在Oracle数据库中,是没有这个关键字的,所以也不能通过这样来实现主键自增.下面我就为大家介绍两种实现主键自增的方法. 两种方法的基础都有一个概念就是序列(sequence)的概念,一种是利用序列和显式调用的方式去实现主键自增,另一种是通过序列和触发器(trigger)来实现主键自增. /*1.利用序列主键自增*/ 第一步.创建表 --创建表,主键为ID CREATE TABL

mysql中InnoDB表为什么要建议用自增列做主键

InnoDB引擎表的特点 1.InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 (图片来源于网上) B+ 树的特点: (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的; (2)不可能在非叶子结点命中; (3)非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层; 2.如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引.如果没有显式定义主键,则InnoDB会选择第一个不包含有NU