`

批量生成Oracle Sequence

 
阅读更多

项目里面有几百张表,没有创建sequence, 

还好每个表的主键命名都是ID,

 

create or replace PROCEDURE "ADD_SEQ_TRIGGER" AS 
  ctr number := 0;
  ctr2 number := 0;
  addcount number := 0;
  totcount number := 0;
  mcount number := 0;
  var_name varchar(50) := 'ID';
  var_seq varchar(50);
  Var_Trg Varchar(50);
  var_nex varchar(50);
begin
 FOR t IN (select table_name from user_tables where table_name like 'TD_PRO%') 
  LOOP    
      select count(*) into ctr from user_tab_columns where table_name like t.table_name and column_name like var_name;
      IF (ctr > 0) THEN   
        var_seq :=t.table_name||'_SEQ';
        var_trg :=t.table_name||'_TRG';
        var_nex :=t.table_name||'_SEQ'||'.nextval';      
        select count(*) into ctr2 from USER_SEQUENCES where sequence_name = var_seq;
        if(ctr2> 0) THEN
           dbms_output.put_line('sequence exist for table: '||t.table_name||'!'); 
        ELSE
          EXECUTE IMMEDIATE 'CREATE SEQUENCE '||var_seq||' START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';    
          addcount := addcount + 1;
        END IF;  
         dbms_output.put_line('create or replace trigger for table: '||t.table_name||'!'); 
        EXECUTE IMMEDIATE 'create or replace trigger '||var_trg||' BEFORE INSERT ON '||t.table_name||' for each row begin '||
                          'if inserting then if :NEW."ID" is null then '||
                          'select '||var_nex||' into :NEW."ID" from dual; end if;end if;end;';     
      ELSE  
        dbms_output.put_line('ID does NOT exist for table: '||t.table_name||'!');      
      END IF;  
         totcount :=  totcount + 1;
  END LOOP;
   DBMS_OUTPUT.PUT_LINE('total tables count: '||totcount);
   DBMS_OUTPUT.PUT_LINE('total add count: '||addcount);
END ADD_SEQ_TRIGGER;

 

分享到:
评论

相关推荐

    oracle快速批量生成表和触发器和序列.zip

    在Oracle数据库管理中,批量生成表、触发器和序列是一项常见的任务,特别是在系统初始化或数据迁移时。这个压缩包文件“oracle快速批量生成表和触发器和序列.zip”显然是为了帮助用户快速完成这类操作。下面将详细...

    批量修改Oracle序列值的存储过程

    在Oracle数据库中,序列(Sequences)是一种自动递增或递减的数字生成器,常用于主键生成或者自增字段。批量修改Oracle序列值的需求可能出现在数据迁移、恢复或测试环境中,确保序列与实际数据匹配。这篇博客分享的...

    mybatis+Oracle做批量导入时的坑

    总的来说,Java开发中使用MyBatis与Oracle配合进行批量导入时,关键在于如何构造正确的SQL语句以适应Oracle的特性,如使用序列生成主键,以及正确处理并发和事务。通过DAO、Service和Controller层的合理分工,可以...

    mysql-oracle数据同步

    在数据同步过程中,如果需要保持两个数据库的主键一致,需要在插入Oracle时根据MySQL的最新主键值动态生成Oracle的序列号。 实现这个过程的具体步骤可能包括: 1. 查询MySQL的最新主键值,例如:`SELECT AUTO_...

    Oracle经典案例

    示例还涉及了序列(sequence)的概念,通过`create sequence`语句创建了一个名为`sq_sid`的序列,用于自动递增主键值。接着在循环中利用`sq_sid.nextval`为每一条新记录生成唯一的ID,并通过`insert`语句将数据插入到`...

    oracle数据库主键自增并且返回主键值

    create sequence seq_users ##创建序列seq_users increment by 1 ## 步长,每次加1 start with 1 ##从1开始 minvalue 1 ##最小值 maxvalue 9999999 ##最大值 order ##确保按照请求次序生成整数 【不常用的设置】....

    oracle自增序列

    - **批量数据处理**:在处理大量数据时,序列可以帮助快速生成一系列唯一的标识符。 总之,Oracle自增序列是一种非常实用的功能,在实际开发中有着广泛的应用。掌握如何正确创建和使用序列对于提高数据库应用程序的...

    MyBatis Oracle 自增序列的实现方法

    在Oracle数据库中,由于没有像MySQL的`auto_increment`或者SQL Server的`IDENTITY`这样的内置机制,所以自增序列的实现通常需要借助于Oracle的`SEQUENCE`对象。MyBatis,作为一个强大的ORM(对象关系映射)框架,...

    oracle 实际值超过数据库某个字段指定长度报错解决

    在一些特定场景中,比如使用Oracle序列(sequence)自动生成的ID,随着序列值的增长,可能会超过当初为存储序列值而设定的字段长度,从而引发这个问题。 解决`ORA-01438`错误的基本方法是调整字段的长度以适应更大...

    Oracle开发笔记

    Oracle 中的序列是通过 CREATE SEQUENCE 语句创建的。 * 序列可以用于生成自增 ID 字段,例如在建表时将要建自增 ID 字段为 Number 类型,然后创建序列,并建立触发器来实现自增 ID 字段的自动增长。 存储过程 * ...

    Oracle数据库培训.pptx

    序列在Oracle中用于生成唯一的数字,常用于主键生成。创建序列的命令: ```sql CREATE SEQUENCE sequence_name START WITH value INCREMENT BY increment; ``` 五、约束和索引 约束是确保数据完整性的一种方式,如...

    Oracle 删除所有表,视图,序列,函数,存储过程等SQL

    3. **序列**(Sequence):是一种数据库对象,用于生成连续整数序列,常用于自动生成主键值。 4. **函数**(Function):是可以返回值的过程,可以在查询中调用,执行特定的操作。 5. **存储过程**(Procedure):是...

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

    但是,Oracle提供了另外一种机制,通过结合使用触发器(trigger)和序列(sequence)来达到类似的效果,使得我们能够在插入新记录时自动为某个列分配唯一的递增数值。以下是一个详细的步骤和解释: 1. **创建序列...

    oracle循环游标

    序列是一种自动生成唯一数值的对象,常用于自动填充表的主键字段。例如,`create sequence mySeq;`创建了一个名为`mySeq`的序列。然后,在插入新记录时,可以使用`mySeq.Nextval`获取序列的下一个值,而`mySeq....

    Oracle相关知识

    "创建自增长序列"是Oracle中用于生成唯一标识符的方法,常用于主键字段。使用`CREATE SEQUENCE`命令可以创建一个序列: ```sql CREATE SEQUENCE sequence_name START WITH value INCREMENT BY increment; ``` 这里的...

    Oracle数据库第4讲.pptx

    - 序列是Oracle数据库中用于生成唯一数值的自动增量工具,常用于主键生成。例如,每次插入新行时,序列会自动提供一个唯一的数值,确保每个新记录的主键值都是唯一的。 3. 管理索引: - 索引用于加速数据查询,...

    sample_schema_scripts Oracle 数据库 示例方案脚本(含结构+数据脚本)

    序列(SEQUENCE)用于生成唯一的整数,常作为主键的默认值。同义词(SYNONYM)则为数据库对象提供别名,方便访问。 数据脚本则用来填充这些新建对象的数据。在Oracle中,可以使用`INSERT INTO`语句将数据插入到表中...

    oracle课件:第四章 数据库对象管理.ppt

    序列在Oracle中用于生成唯一标识符,常见于主键生成。例如,`CREATE SEQUENCE seq_name START WITH 1 INCREMENT BY 1;` 创建了一个从1开始,每次自增1的序列。序列可以被表的自动增长字段引用,以确保插入新记录时的...

    Oracle Database 11g OCP Certification All-in-One Exam Guide

    - **序列 (Sequence)**:序列是一种自动生成数字的对象,常用于为新记录自动分配唯一的主键值。 - **存储过程 (Stored Procedure)**:存储过程是一组预编译的 SQL 语句,可以接受输入参数、返回输出参数并执行一系列...

Global site tag (gtag.js) - Google Analytics