最近在做一个任务管理系统,任务表ID被设计成流水号的形式(方便其子任务的查询统计),准备以当天的日期+当天最大任务数量组成。
java 代码
- public static String getNo(){
- long No = 0;
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
- String nowdate = sdf.format(new Date());
- No = Long.parseLong(nowdate)*1000;
- No+=getTaskNo();
- return getUserId+No;
- }
- public static int getTaskNo(){
- return 001;
- }
日期后面的递增值想通过oracel序列来获得,从网上找了个重置序列的存储过程
sql 代码
- SQL> create sequence seq_1 increment by 1 start with 1 maxvalue 999999999;
-
- 序列已创建。
- SQL> create or replace procedure seq_reset(v_seqname varchar2) as
- 2 n number(10);
- 3 tsql varchar2(100);
- 4 begin
- 5 execute immediate 'select '||v_seqname||'.nextval from dual' into n;
- 6 n:=-(n-1);
- 7 tsql:='alter sequence '||v_seqname||' increment by '|| n;
- 8 execute immediate tsql;
- 9 execute immediate 'select '||v_seqname||'.nextval from dual' into n;
- 10 tsql:='alter sequence '||v_seqname||' increment by 1';
- 11 execute immediate tsql;
- 12 end seq_reset;
- 13 /
-
创建一个JOB,让其每天零点的时候调用重置序列的过程
sql 代码
- declare
- job1 integer;
- begin
- sys.dbms_job.submit(job1 , 'PROCEDURE__NAME(参数);', to_date('20050603 01:00:00', 'yyyymmdd hh24:mi:ss'),
- 'to_date(to_char(sysdate+1,''yyyymmdd'')||''01:00:00'',''yyyymmdd hh24:mi:ss'')');
- commit;
- end;
分享到:
相关推荐
在Oracle数据库中,生成流水号是一项常见的需求,特别是在创建序列或者需要唯一标识的场景下。以下将详细解释如何在Oracle中实现这一功能。 首先,我们需要一个专门用来存储流水号的表,例如`HP_NO`,它包含三个...
在业务系统中,经常需要生成唯一的流水号或序列号,这在处理订单、发票、工单等事务时尤其重要。`fn_no_make` 函数就是一个用PL/SQL编写的示例,专门用于生成带有特定前缀、日期和顺序编号的流水号。 首先,我们来...
用于自动生成流水账号的存储过程 有详细的注释
//生成最大编号 规则为当前日期+6位顺番, //没有记录时,当前日期+000001 //当前日期比从数据库取得的最大日期大时, 当前日期+000001 //当前日期等于从数据库取得最大日期,顺番+1
在数据库设计中,选择合适的流水号生成策略是很关键的。例如,如果业务需求是全局唯一的流水号,可能还需要结合时间戳或者其他信息来生成,防止并发插入时出现重复。此外,如果数据量大,要考虑如何避免流水号过大...
Oracle生成单据编号存储过程,在做订单类似的系统都可能会存在订单编号不重复,或是流水号按日,按年,按月进行重新编号。 可以参考以下存储过程 CREATE OR REPLACE procedure Pro_GetBillNO(TypeTable in varchar2...
在Oracle数据库管理中,序列是一种常用的对象,用于自动产生唯一的数值。序列通常被用来作为主键或唯一标识符,特别是在自动生成记录ID时。然而,有时候我们可能需要重置序列,使其从特定值开始,例如从1开始增长,...
一个SQL脚本函数,10进制转换为34进制。34进制指以0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、G、H、J、K、L、M、N、P、Q、R、S、T、U、V、W、X、Y、Z为基数做累加。
Sequence常用于为表中的某列自动生成唯一的主键值或者作为流水号使用。 #### 二、Sequence的创建与基本属性 ##### 创建Sequence的基本语法如下: ```sql CREATE SEQUENCE [start WITH n] -- 开始位置,默认递增...
在 Java 编程过程中,这种机制可以用来生成唯一的序号,例如订单号、流水号等。 在 Oracle 10g 中,实现字段自增长需要经过以下步骤: 1. 创建表:create table list(id number, name varchar2(50)); 这里创建...
不过,提供的内容并没有直接涉及到Oracle 12c数据库管理的具体知识点,而是包含了一些推广信息,提示用户可以联系QQ号获取IT类书籍PDF下载链接。这些信息与我们需要生成的知识点无关,因此我将直接从标题和描述中...
在 Oracle 数据库中,与许多其他关系型...这种方法适用于那些需要自动生成唯一标识符的情况,比如主键或业务流水号。需要注意的是,虽然这种方法很实用,但在高并发环境下可能需要考虑序列值的并发问题,以及性能优化。
` 这个查询,它将当前日期(`SYSDATE`)转换为字符串(`TO_CHAR(SYSDATE, 'yyyymmdd')`),并结合一个流水号序列(`Flow_NO_SEQUENCE.Nextval`)和零填充,生成一个格式化的字符串。这种方式常用于创建具有日期和...
在生成连续流水号的场景下,如果不使用锁,可能会在高并发环境中出现数据不一致。示例代码展示了在没有锁定的情况下,可能存在的并发问题,以及如何通过`FOR UPDATE`子句获取行锁,确保在锁定状态下进行流水号的生成...
在某些业务系统中,如项目管理、案件受理等,流水号的自动生成不仅关系到数据的组织效率,也影响到数据的一致性和准确性。例如,文章中给出的创建示例,通过触发器实现`acceptcaseb`表中记录的自动编号,确保了流水...
一个典型的应用例子是在生成连续流水号时,使用FOR UPDATE子句可以确保在并发操作中正确生成唯一编号。 5. **性能优化**: - 了解如何通过索引、物化视图、分区和并行查询等技术来提升查询性能,同时避免全表扫描...
在进行数据处理时,经常需要生成长度一致的流水号,例如在创建订单时可能会使用到当天的四位数字作为流水号。例如,如果当天是第一条记录,则需要将数字“1”转换成“0001”。然而,在Oracle数据库中使用`TO_CHAR(1,...