关于oracle的sequence和trigger。

原先mysql中每个自增字段,在oracle中就需要建立一个sequence和一个trigger。

就算同一个表中有x个自增字段,那么就需要建立x个sequence和x和trigger。

实际中,我建立了915个sequence和915个trigger。因为mysql有915个自增自段。

生成的语句如下:

create sequence SEQ_E3_910_YUGOU_GOODSMX_ID increment by 1 start with 1
minvalue 1
nomaxvalue
nocache
order;

create trigger TRIGGER_E3_910_YUGOU_GOODSMX_I before insert on "YUGOU_GOODSMX"
for each row
begin
select SEQ_E3_910_YUGOU_GOODSMX_ID.nextval into:new."ID" from sys.dual
;
end;

有915个这样的成对语句出现。

但是运行时,报错了ORA-24344: success with compilation error。(警告: 创建的触发器带有编译错误。)

于是我只运行create sequence ,没有问题,一下跑了几百个。

再只运行create trigger ,就会报如上的错误 。

但是我把这些create trigger,在navicat里单个运行,就都能成功。

查了老半天,才知道原因是:http://www.2cto.com/database/201304/205599.html

因为触发器需要先编译,每创建一个触发器,需要以“/”结束,然后才能执行下一个。

于是改为如下:

create trigger TRIGGER_E3_910_YUGOU_GOODSMX_I before insert on "YUGOU_GOODSMX"
for each row
begin
select SEQ_E3_910_YUGOU_GOODSMX_ID.nextval into:new."ID" from sys.dual
;
end;

/

就一次性跑通多个create trigger了。

时间: 2024-08-15 05:49:31

关于oracle的sequence和trigger。的相关文章

oracle 12c之前用sequence 和 trigger来生成自动增长的列

SQL> create table scott.t1 (id number, val varchar2(8)); Table created. SQL> CREATE SEQUENCE scott.t1_id_seq INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE ; Sequence created. SQL> create or replace trigger scott.t1_id_trigger 2 before insert on

oracle的sequence序列

Sequence:序列是一个数据对象,可以用来生成唯一的整数.是数据库里独立的对象,不依赖任何表,为oracle所特有.用来自动生成主键值,可以用sequence的地方:inert语句的子查询中,update的set等.创建序列 :Create sequence seqname -increament by 1//每次增长1 -start with 1//从1开始增长 -maxvalue 100//最大值是100,nomaxvalue:不设最大值 -nocycle//一直累加没有循环 -noca

JDBC读取新插入Oracle数据库Sequence值的5种方法

Oracle的sequence实现非常灵活,所以也带来一些易用性问题,如何取到新插入记录生成的sequence值与其它数据库有较大差别,本文详国介绍了5种实现读取新插入记录sequence值的方法. 测试用的数据库脚本: SQL> create table T1 2 ( 3 ID NUMBER 4 ); Table created SQL> create sequence SEQ_T1; Sequence created //公共代码:得到数据库连接 public Connection get

oracle 主键生成策略-sequence序列+trigger触发器

oracle中设置表的主键字段为自增序列(实例)1.首先创建一个表(如日志表) //删除库表中存在的日志表drop table S_LOG_INFO cascade constraints;//新建日志表create table S_LOG_INFO ( PRIMARYKEY NUMBER not null,//主键 USERACCOUNT VARCHAR2(50),//操作用户账号 USERNAME VARCHAR2(100),//操作用户 OPERATIONTIME DATE,//操作时间

oracle 序列sequence

查询所有的序列: select 'create sequence '||sequence_name|| ' minvalue '||min_value|| ' maxvalue '||max_value|| ' start with '||last_number|| ' increment by '||increment_by|| (case when cycle_flag='N' then '' else ' cycle ' end) || (case when order_flag='N'

Oracle中Sequence使用

Oracle提供了sequence对象,由系统提供自增长的序列号,通常用于生成数据库数据记录的自增长主键或序号的地方. 下面介绍一下关于sequence 的生成,修改,删除等常用的操作: 1. 创建 Sequence 使用如下命令新建sequence(用户需要有CREATE SEQUENCE 或者CREATE ANY SEQUENCE权限): CREATE  SEQUENCE test_sequence  INCREMENT  BY   1   --  每次加的个数据   START  WITH

Oracle中sequence的使用方法

在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方. 1.Create Sequence (注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限) CREATE SEQUENCE emp_sequence INCREMENT BY 1 —— 每次加几个 START WITH 1 —— 从1开始计数 NOMAXVALUE —— 不设置最大值 NOCYCLE —— 一直累加,不循环 CA

oracle:触发器,自治事务 trigger

create or replace trigger TRI_FC83_INSERT before insert ON FC83 FOR EACH ROW declare PRAGMA AUTONOMOUS_TRANSACTION; BEGIN :new.afc212 := '1'; delete from fc83 where afc001 = :new.afc001 and afa031 = :new.afa031 and afc210 = :new.afc210; commit; END T

hibernnate 使用Oracle的sequence为对象生成主键 自增50的问题

前段时间在做一个SSH的项目,使用Oracle中的sequence作为对象表的主键生成策略,在数据库中已经配置好了sequence的步长为1,可是在运行测试时,发现主键ID每次增加的步长是50. 奇怪之余Google一下,找到如下的解决方案,在对实体类的ID进行注解时,加上一句"allocationSize=1",例如对表EL的主键配置了一个序列叫"EL_SEQ",那么在getId方法上面使用如下注解即可解决. @SequenceGenerator(name=&qu