`

更新sequence值的动态sql语句

阅读更多
一.
--导出之前把该语句执行一遍,复制执行结果,然后在导入后的数据库中删除sequence,再执行该语句.
select 'create sequence '||sequence_name||    
       ' minvalue '||min_value||    
       ' maxvalue '||max_value||    
       ' start with '||(last_number+1000000)||    
       ' increment by '||increment_by||    
       (case when cache_size=0 then ' nocache' else ' cache '||cache_size end) ||';'   
from user_sequences 


二.
create or replace procedure p_modify_sequences is  
  --更新各序列值的动态sql语句     
  str_sql varchar2(4000);  
  --是否修改成功,未发生异常返回true     
  r boolean;  
  
  --修改相应序列的nextval     
  --sequencename:序列名     
  --talename:由序列生成主键的表名     
  --keyf:由序列生成的主键名     
  function f_modify_sequence(sequencename varchar2,  
                             talename     varchar2,  
                             keyf         varchar2) return boolean is  
    lastvalue integer;  
    currvalue integer;  
    f_sql     varchar2(4000);  
    next_num  number;  
    max_num   number;  
  begin  
    --查询表中主键的最大值     
    f_sql := 'select max(' || keyf || ') from ' || talename;  
    execute immediate f_sql  
      into max_num;  
    dbms_output.put_line('表' || talename || '的' || keyf || '最大值为:' ||  
                         max_num);  
    if (max_num is not null) then  
      next_num := max_num + 1;  
      --修改序列的自增量为1     
      f_sql := 'alter sequence ' || sequencename ||  
               ' increment by 1 nocache';  
      execute immediate f_sql;  
      
      --循环     
      loop  
        --查询当前序列的下一个值     
        f_sql := 'select ' || sequencename || '.nextval from dual';  
        execute immediate f_sql  
          into lastvalue;  
        
        --当序列的下一个值>= 表中现有主键的最大值时退出循环     
        exit when lastvalue >= next_num - 1;  
        --如果序列的下一个值小于表中现有主键的最大值时继续获取序列的下一个值     
        f_sql := 'select ' || sequencename || '.nextval from dual';  
        execute immediate f_sql  
          into lastvalue;  
        
      end loop;  
      --修改后的sequencename.currval仍为修改前的值,但sequencename.nextval值为中主键的最大值+1     
      f_sql := 'alter sequence ' || sequencename ||  
               ' increment by 1 cache 20';  
      execute immediate f_sql;  
      dbms_output.put_line('序列' || sequencename || '的下一个值为' || lastvalue);  
      dbms_output.put_line('');  
    end if;  
    commit;  
    return true;  
  exception  
    when others then  
      return false;  
  end f_modify_sequence;  
  
begin  
  r := f_modify_sequence('SEQ_MENUCODE', 'T_BOSSMENU', 'MENUCODE');  
  r := f_modify_sequence('SEQ_FEE',  
                         'T_BSFEE',  
                         'to_number(substr(FEE_NO,-12))');  
end p_modify_sequences;  
  
  
  
set serveroutput on;  
exec p_modify_sequences;
分享到:
评论

相关推荐

    Oracle Sql语句转换成Mysql Sql语句

    本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要差异在于以下几个方面: 1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在...

    oracle常用SQL语句(汇总版).docx

    数据控制语句用于操作数据库中的数据,包括插入、删除、更新等操作。 1. INSERT 语句 INSERT 语句用于向数据库中插入新记录。基本语法为: INSERT INTO 表名(字段名 1, 字段名 2, ……)VALUES(值 1, 值 2, ...

    mybatis教程之动态sql语句[收集].pdf

    动态 SQL 是 MyBatis 提供的一种强大的功能,允许我们在 XML 映射文件或者注解中编写条件语句,使得 SQL 语句可以根据输入参数的不同而改变。 在描述的场景中,我们关注的是如何在插入数据时动态生成主键。在 ...

    南大通用GBase8s SQL常用SQL语句(十五).docx

    【南大通用GBase8s SQL常用SQL语句(十五)】 在数据库管理中,SQL(Structured Query Language)是用于处理关系型数据库的标准语言。本文将聚焦于GBase8s,一款由南京大学通用数据技术有限公司开发的国产数据库...

    oracle PL/SQL语句

    * 函数是PL/SQL语句中的一种数据库对象,它可以用于计算和返回一个值。 * 创建函数需要使用CREATE FUNCTION语句,并指定函数的名称、参数列表和返回类型。 * 函数可以通过SELECT语句来调用,或者通过存储过程或...

    全国所有省市sql语句

    例如,如果某个省份新增了地级市,只需简单地向现有的SQL语句中添加相应的插入语句即可完成更新。 ### 关键知识点五:SQL语句的错误处理 在编写和执行大量的SQL插入语句时,确保数据的准确性和一致性至关重要。...

    SQL语句大全,比较好的一样东西

    以下是一些SQL语句的基础知识和高级应用,这些内容覆盖了数据库管理、数据查询和优化等多个方面。 1. **创建数据库**: - `CREATE DATABASE database-name` 用于创建新的数据库,而在创建前可以通过 `IF EXISTS` ...

    Oracle实验二-SQL语句综合应用

    在本实验中,我们主要探讨了Oracle数据库中的SQL语句应用,涉及到了表、视图、索引以及序列等核心概念。以下是对这些知识点的详细解释: 1. **创建表**: - 使用`CREATE TABLE`语句创建了一个名为`person`的表,...

    SQL语句学习.docx.docx

    SQL Server 2012及以上版本支持`CREATE SEQUENCE`,用于生成有序的整数序列。 7. **删除表**: 使用`DROP TABLE`删除表。 8. **修改表结构**: - `ALTER TABLE`可以用来添加列`ADD COLUMN`,删除列`DROP COLUMN...

    简单而基础的SQL语句

    以下将详细解释标题和描述中提到的一些基础SQL语句。 1. **创建数据库**: 使用`CREATE DATABASE`语句可以创建新的数据库。在创建前,通常会先检查数据库是否已经存在,如果存在,则使用`DROP DATABASE`删除,确保...

    sql 语句 功能全

    ### SQL语句功能详解 #### 一、数据库操作 ##### 创建数据库 ```sql IF EXISTS (SELECT * FROM sys.databases WHERE name = N'databaseName') BEGIN DROP DATABASE databaseName; END GO CREATE DATABASE ...

    常用的sql语句

    ### 常用SQL语句详解 #### 一、SQL语句概述 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。它被广泛应用于各种数据库系统中,包括MySQL、Oracle、SQL Server等。SQL语言...

    Oracle数据库维护常用SQL语句集合

    根据提供的文件信息,我们可以归纳出一系列与Oracle数据库维护相关的SQL语句知识点。这些知识点主要涵盖了查询当前会话信息、查询特定会话的操作系统ID、获取指定会话正在执行的SQL语句、根据对象查找相关会话信息、...

    SQL语句大全百度查询.pdf

    本文档"SQL语句大全百度查询.pdf"涵盖了SQL中的多个关键概念和操作,包括数据库的创建与删除、数据备份、表的操作、序列、索引、视图以及基本的查询语句。下面将详细解释这些知识点: 1. **创建数据库**: - 使用`...

    SQL语句学习教程

    ### SQL语句学习教程知识点概览 #### 一、SQL*PLUS工具软件的使用 - **定义**:SQL*Plus是Oracle提供的一款用于执行SQL语句的命令行工具,是Oracle数据库管理员常用的工具之一。 - **功能**: - 执行SQL语句 - ...

    Sql Server语句经典大全

    5. 创建序列:使用 CREATE SEQUENCE 语句创建一个序列。 6. 删除新表:使用 DROP TABLE 语句删除一个表。 7. 增加一个列:使用 ALTER TABLE 语句添加一个列。 8. 删除一个列:使用 ALTER TABLE 语句删除一个列。 9. ...

    Oracle常用sql语句

    ### Oracle常用SQL语句详解 #### 数据控制语句(DML) **1. INSERT语句** 插入数据到表中的操作通过`INSERT`语句实现。基本语法如下: ``` INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...)...

Global site tag (gtag.js) - Google Analytics