Oracle中序列的使用例子

曾经在触发器中使用序列(SEQUENCE):

create or replace trigger TRI_SUPPLIER
  before insert on   SUPPLIER
  for each row
begin
  select seq_supid.NEXTVAL into:new.supcode from dual;
  select seq_supid.CURRVAL into:new.supID from dual;
end;

显然,忽略了并发,修改后如下:

create or replace trigger TRI_SUPPLIER
  before insert on   SUPPLIER
  for each row
declare  v_supval number(20);
begin
  select  seq_supid.NEXTVAL into v_supval  from dual;
  select v_supval  into:new.supcode from dual;
  select v_supval  into:new.supID from dual;
end;

再附上一个使用触发器防止重复记录的例子:

CREATE OR REPLACE TRIGGER TRI_ASSETPROJECT
  BEFORE INSERT ON ASSETPROJECT
  FOR EACH ROW
DECLARE V_PROJECTID NUMBER(20) :=0;
 V_TMP VARCHAR2(100) :='';
BEGIN
     SELECT :NEW.PROJECTCODE INTO V_TMP FROM DUAL;
     dbms_output.put_line(V_TMP);
     SELECT PROJECTID INTO V_PROJECTID  FROM ASSETPROJECT WHERE PROJECTCODE = :NEW.PROJECTCODE and rownum=1 ;
  IF (NVL(V_PROJECTID,0)<=0) THEN ----如果不存在编码记录
      begin
       SELECT SEQ_ASSETPROJECTID.NEXTVAL INTO :NEW.PROJECTID FROM DUAL;
       dbms_output.put_line('New ID ');
      end;
    ELSE --如果已存在编码记录
      begin
       --SELECT :V_PROJECTID INTO:NEW.PROJECTID FROM DUAL;
       RAISE_APPLICATION_ERROR(-20001, '项目编码已存在,不允许重复添加!');
       dbms_output.put_line('Old ID ');
      end;
    end if;
END;

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索select
, 触发器
, 序列
, into
from
oracle序列的使用、oracle 序列使用、oracle中序列的使用、oracle使用序列赋值、oracle如何使用序列,以便于您获取更多的相关知识。

时间: 2024-09-11 04:25:34

Oracle中序列的使用例子的相关文章

ORACLE中序列-sequence的应用

oracle oracle中没有象Acces中自动编号的字段类型,所以在oracle中要想用一个字段自动增值,还比较麻烦,在此提供给大家一个方法,利用序列,来完成字段的自动增加,下边介绍一下怎么创建序列,使用序列,和删除序列. 1.创建序列--------------create sequence  create sequence  Seq_AutoID   //所起序列名叫 Seq_AutoID ,需要记住此序列名,以后方可调用 minvalue   1   //最小值从1开始 可以根据自己的

Oracle中sql loader使用例子

一.SQLLoader将 Excel 数据导出到 Oracle 1.创建SQL*Loader输入数据所需要的文件,均保存到C:\,用记事本编辑: 控制文件:input.ctl,内容如下: load data --1.控制文件标识 infile 'test.txt' --2.要输入的数据文件名为test.txt append into table test --3.向表test中追加记录 fields terminated by X'09' --4.字段终止于X'09',是一个制表符(TAB) (

Oracle中序列的操作以及使用前对序列的初始化

  一 创建序列 create sequence myseq start with 1 increment by 1 nomaxvalue minvalue 1   二 初始化序列   select myseq.nextval from dual; 这里值得注意的是,如果先直接写select myseq.currval from dual,会提示会提示myseq.currtval尚未在此会话中定义.     三 使用序列   初始化序列之后才可以使用该序列,我们以ibatis为例. <inser

Oracle中Trigger例子1

oracle erOracle中Triggle例子1 CREATE OR REPLACE TRIGGER QMAILB.T_MSG_SI_TRIGGERAFTER INSERTON QMAILB.T_MSG_MO REFERENCING NEW AS NEW OLD AS OLDFOR EACH ROWDECLAREtmpVar NUMBER;v_link_id t_msg_mt.LINK_ID%type;v_src_termid t_msg_mt.SRC_TERMID%type;v_dst_t

MySQL中如何实现类似Oracle的序列

Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的: 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长.开始索引.是否循环等:若需要迁移数据库,则对于主键这块,也是个头大的问题. 本文记录了一个模拟Oracle序列的方案,重点是想法,代码其次. Oracle序列的使用,无非是使用.nextval和.currval伪列,基本想法是:1.MySQL中新建表,用于存储序列名称和值:2.创建函数,用于获取序列表

ssh框架中如何为oracle中对应的表创建hibernate序列,以达到新加主键自增的功能

问题描述 ssh框架中如何为oracle中对应的表创建hibernate序列,以达到新加主键自增的功能 解决方案 .hbm 文件 <id name="id" type="java.lang.String"> <column name="ID" length="32" /> <generator class="uuid.hex" /> </id>策略不一样<

Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例_oracle

问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(trigger)和序列(sequence)来模式实现. 示例: 1.建立表 复制代码 代码如下: create table user  (       id   number(6) not null,       name   varchar2(30)   not null primary key  ) 

oracle中如何设置自增主键

 首先,你要有一张表! 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 -- 每次加几个

ORACLE 中ROWNUM用法总结!

ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明 假设某个表 t1(c1)