`
winie
  • 浏览: 224286 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

修改序列

阅读更多

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;  
    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;  
    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;  
      --f_sql:='select '||sequenceName||'.nextval from dual';  
      --execute immediate f_sql;  
      --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;  
        --select SE_DATATYPE.nextval into LastValue from dual;    
        --当序列的下一个值>= 表中现有主键的最大值时退出循环  
        exit when lastvalue >= next_num - 1;  
        --如果序列的下一个值小于表中现有主键的最大值时继续获取序列的下一个值  
        f_sql := 'select ' || sequencename || '.nextval from dual';  
        execute immediate f_sql  
          into lastvalue;  
        --select SE_DATATYPE.nextval into LastValue from dual;  
      end loop;
      --修改后的sequencename.currval仍为修改前的值,但sequencename.nextval值为中主键的最大值+1
      f_sql := 'alter sequence ' || sequencename ||  
               ' increment by 1 cache 20';  
      execute immediate f_sql;  
    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');  
end p_modify_sequences;

 

--更改步长
Alter sequence SEQ_FEE increment by 10;
select SEQ_FEE.nextval from dual;
--还原步长
Alter sequence mysq increment by 1;
select 'SF'||LPAD(SEQ_FEE.NEXTVAL,12,'0') AS VAL FROM DUAL;

分享到:
评论

相关推荐

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

    批量修改Oracle序列值的需求可能出现在数据迁移、恢复或测试环境中,确保序列与实际数据匹配。这篇博客分享的是一个自定义的存储过程,用于批量修改Oracle序列的当前值(CURRENT VALUE)。 首先,我们需要理解...

    oracle 创建序列

    如果需要更改序列的属性,可以使用ALTER SEQUENCE语句。例如,改变`emp_sequence`的递增值为10,最大值为10000,并允许循环: ```sql ALTER SEQUENCE emp_sequence INCREMENT BY 10 MAXVALUE 10000 CYCLE; ``` ####...

    Oracle使用序列创建自增字段

    这允许用户更改序列的一些属性,如增量、最大值、是否循环等。需要注意的是,并非所有序列属性都可以被修改,例如起始值不能直接修改,若需改变起始值,则需要先删除序列再重新创建。 以下是一个修改 `SEQ_EMP` ...

    序列图合成工具

    通过这个工具,IT专业人士可以更便捷地创建和修改序列图,有效地沟通系统设计思路,降低理解难度,提高团队合作效率。无论是对于软件开发、系统分析还是项目管理,序列图合成工具都是不可或缺的利器。

    struct 修改 视频序列

    在这个“struct 修改 视频序列”的主题中,我们可能涉及到如何在 C++ 中创建、初始化、访问和修改 `struct` 类型的变量,特别是与视频序列处理相关的结构体。 首先,让我们理解 `struct` 的基本用法。在 C++ 中,你...

    oracle 不用新建序列 重置序列(从1开始增长)

    3. **修改序列的`INCREMENT BY`属性**:使用`ALTER SEQUENCE`语句将序列的`INCREMENT BY`属性修改为我们计算出的增量。 4. **再次获取序列的下一个值**:执行`SELECT sequence_name.NEXTVAL FROM DUAL`,这将使序列...

    cgjoy-闪电序列图.rar

    6. **编程和脚本**:在某些情况下,为了自动化处理或批量修改序列图,可能需要用到编程语言如Python或JavaScript来编写脚本,进行图像处理任务的批量操作。 7. **物理知识**:虽然艺术创作可以自由发挥,但了解闪电...

    oracle序列的用法

    - **修改序列**:使用`ALTER SEQUENCE`命令可以修改序列的属性,例如改变增量值、最小值、最大值等。 ```sql ALTER SEQUENCE v1 INCREMENT BY 2 MAXVALUE 99999; ``` - **删除序列**:如果不再需要某个序列,...

    json序列化notepad++

    标题中的"json序列化notepad++"指的是在Notepad++中使用插件来格式化和解析JSON数据。序列化是指将JSON对象转换为字符串的过程,以便在网络上传输或保存到文件中;反序列化则是将JSON字符串转换回对象的过程。 描述...

    反序列化工具

    5. **重新发送请求**:修改后,通过Burp Suite重新发送修改过的请求,目标服务器会接收到这个包含恶意序列化对象的请求。如果存在漏洞,恶意代码可能会被执行。 6. **观察结果**:通过观察服务器的响应以及任何异常...

    Oracle数据库中序列的使用

    本文将详细介绍Oracle数据库中序列的创建、修改以及删除方法,并通过一个具体的示例来演示序列的使用。 #### 序列的基本概念 序列是一种能够按需生成连续整数的数据库对象。它可以用于自动填充某些字段,特别是当...

    illumina各测序试剂盒接头序列引物序列信息2015年10月[收集].pdf

    任何未经授权的使用、复制、分发或修改序列信息都是非法的。 四、Illumina测序试剂盒引物序列信息的使用注意事项 在使用 Illumina 测序试剂盒引物序列信息时,需要注意以下几点: * 仅使用 Illumina 授权的供应商...

    oracle同义词和序列

    维护序列包括查询序列信息、修改序列和删除序列三个方面。查询序列信息可以在 ALL_SEQUENCE 和 USER_SEQUENCE 数据字典中找到。修改序列时,需要注意不要使依赖于序列号的主键不唯一。删除序列可以通过 OMEC 或 SQL ...

    Java安全漫谈 - 07.反序列化篇(1)1

    PHP的序列化和反序列化则相对封闭,开发者无法直接修改序列化数据流,只能通过`__sleep`和`__wakeup`方法在序列化前后执行额外操作。例如,当序列化包含数据库连接的类时,由于资源类型不会被序列化,因此在反序列化...

    轻松掌握oracle数据库开发中序列的使用

    例如,要修改序列`EXAM_NO_SEQ`的增量为2,可以这样操作: ```sql ALTER SEQUENCE EXAM_NO_SEQ INCREMENT BY 2; ``` 3. **序列的删除** 删除序列的命令是`DROP SEQUENCE [user.]sequence_name`,例如删除序列`...

    oracle自增序列

    除了创建序列外,还可以进行其他操作,如获取序列值、修改序列属性和删除序列等。 1. **获取序列值**: - 使用`NEXTVAL`获取序列的下一个值。 - 使用`CURRVAL`获取序列的当前值。 2. **修改序列属性**: - 可以...

    序列化和反序列化1

    自定义的`writeObject()`和`readObject()`方法允许开发者在序列化过程中增加更多的灵活性,例如修改序列化的数据,控制哪些字段参与序列化,或者执行额外的操作。`transient`关键字的存在是为了允许程序员排除某些不...

    序列提交软件sequin使用方法.doc

    用户可以更改序列标题,以便于后续的比较和分析。 12. 保存 在提交序列之前,需要保存序列信息。如果提交成功,那么说明序列修改成功,可以提交了;如果有错误,那么系统会提示,修改好之后再保存。 Sequin是一种...

    java 对象的序列化与反序列化

    5. **深拷贝与浅拷贝**:序列化实际上是实现了深拷贝,即创建了对象的一个完全独立的副本,修改副本不会影响原对象。 6. **安全性问题**:序列化可能导致安全漏洞,因为恶意用户可以通过反序列化执行任意代码。因此...

    序列详解,为您打开序列解释之谜

    如果需要修改已创建的序列,可以使用`ALTER SEQUENCE`语句。需要注意的是,只有序列的所有者或具有ALTER ANY SEQUENCE权限的用户才能执行此操作。修改序列的语法如下: ```sql ALTER SEQUENCE sequence_name ...

Global site tag (gtag.js) - Google Analytics