项目里面有几百张表,没有创建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数据库管理中,批量生成表、触发器和序列是一项常见的任务,特别是在系统初始化或数据迁移时。这个压缩包文件“oracle快速批量生成表和触发器和序列.zip”显然是为了帮助用户快速完成这类操作。下面将详细...
在Oracle数据库中,序列(Sequences)是一种自动递增或递减的数字生成器,常用于主键生成或者自增字段。批量修改Oracle序列值的需求可能出现在数据迁移、恢复或测试环境中,确保序列与实际数据匹配。这篇博客分享的...
总的来说,Java开发中使用MyBatis与Oracle配合进行批量导入时,关键在于如何构造正确的SQL语句以适应Oracle的特性,如使用序列生成主键,以及正确处理并发和事务。通过DAO、Service和Controller层的合理分工,可以...
在数据同步过程中,如果需要保持两个数据库的主键一致,需要在插入Oracle时根据MySQL的最新主键值动态生成Oracle的序列号。 实现这个过程的具体步骤可能包括: 1. 查询MySQL的最新主键值,例如:`SELECT AUTO_...
示例还涉及了序列(sequence)的概念,通过`create sequence`语句创建了一个名为`sq_sid`的序列,用于自动递增主键值。接着在循环中利用`sq_sid.nextval`为每一条新记录生成唯一的ID,并通过`insert`语句将数据插入到`...
create sequence seq_users ##创建序列seq_users increment by 1 ## 步长,每次加1 start with 1 ##从1开始 minvalue 1 ##最小值 maxvalue 9999999 ##最大值 order ##确保按照请求次序生成整数 【不常用的设置】....
- **批量数据处理**:在处理大量数据时,序列可以帮助快速生成一系列唯一的标识符。 总之,Oracle自增序列是一种非常实用的功能,在实际开发中有着广泛的应用。掌握如何正确创建和使用序列对于提高数据库应用程序的...
在Oracle数据库中,由于没有像MySQL的`auto_increment`或者SQL Server的`IDENTITY`这样的内置机制,所以自增序列的实现通常需要借助于Oracle的`SEQUENCE`对象。MyBatis,作为一个强大的ORM(对象关系映射)框架,...
在一些特定场景中,比如使用Oracle序列(sequence)自动生成的ID,随着序列值的增长,可能会超过当初为存储序列值而设定的字段长度,从而引发这个问题。 解决`ORA-01438`错误的基本方法是调整字段的长度以适应更大...
Oracle 中的序列是通过 CREATE SEQUENCE 语句创建的。 * 序列可以用于生成自增 ID 字段,例如在建表时将要建自增 ID 字段为 Number 类型,然后创建序列,并建立触发器来实现自增 ID 字段的自动增长。 存储过程 * ...
3. **序列**(Sequence):是一种数据库对象,用于生成连续整数序列,常用于自动生成主键值。 4. **函数**(Function):是可以返回值的过程,可以在查询中调用,执行特定的操作。 5. **存储过程**(Procedure):是...
序列在Oracle中用于生成唯一的数字,常用于主键生成。创建序列的命令: ```sql CREATE SEQUENCE sequence_name START WITH value INCREMENT BY increment; ``` 五、约束和索引 约束是确保数据完整性的一种方式,如...
但是,Oracle提供了另外一种机制,通过结合使用触发器(trigger)和序列(sequence)来达到类似的效果,使得我们能够在插入新记录时自动为某个列分配唯一的递增数值。以下是一个详细的步骤和解释: 1. **创建序列...
序列是一种自动生成唯一数值的对象,常用于自动填充表的主键字段。例如,`create sequence mySeq;`创建了一个名为`mySeq`的序列。然后,在插入新记录时,可以使用`mySeq.Nextval`获取序列的下一个值,而`mySeq....
"创建自增长序列"是Oracle中用于生成唯一标识符的方法,常用于主键字段。使用`CREATE SEQUENCE`命令可以创建一个序列: ```sql CREATE SEQUENCE sequence_name START WITH value INCREMENT BY increment; ``` 这里的...
- 序列是Oracle数据库中用于生成唯一数值的自动增量工具,常用于主键生成。例如,每次插入新行时,序列会自动提供一个唯一的数值,确保每个新记录的主键值都是唯一的。 3. 管理索引: - 索引用于加速数据查询,...
序列(SEQUENCE)用于生成唯一的整数,常作为主键的默认值。同义词(SYNONYM)则为数据库对象提供别名,方便访问。 数据脚本则用来填充这些新建对象的数据。在Oracle中,可以使用`INSERT INTO`语句将数据插入到表中...
序列在Oracle中用于生成唯一标识符,常见于主键生成。例如,`CREATE SEQUENCE seq_name START WITH 1 INCREMENT BY 1;` 创建了一个从1开始,每次自增1的序列。序列可以被表的自动增长字段引用,以确保插入新记录时的...
- **序列 (Sequence)**:序列是一种自动生成数字的对象,常用于为新记录自动分配唯一的主键值。 - **存储过程 (Stored Procedure)**:存储过程是一组预编译的 SQL 语句,可以接受输入参数、返回输出参数并执行一系列...