oracle 流水号 (日期)

来源:互联网 发布:2017人工智能高校沙龙 编辑:程序博客网 时间:2024/04/30 04:57

在网上找了一下,没有,那就自己写一个了,刚换一公司,刚学习oracle,请大家见笑.可能用MSSQL多了,从编程来说感觉还没有MSSQL方便.用MSSQL下面就是一个函数.如果大家有好的方法,清说说:


--添加sequence  drop sequence EXAMPLE_SEQ
create sequence EXAMPLE_SEQ
increment 
by 1
start 
with 0
minvalue 
0
maxvalue 
9999
cache 
20;
--添加表
create TABLE TEST(id VARCHAR2(20),no VARCHAR2(10),E_ON VARCHAR2(20))

--在TEST表上创建一个触发器
CREATE OR REPLACE TRIGGER TRI_EXAMPLE_TABLE BEFORE INSERT ON TEST FOR EACH ROW
begin 
select to_char(sysdate,'yymmdd')||lpad(EXAMPLE_SEQ.nextval,4,0)  into :new.E_NO from dual;
end;

--创建procedure,修改sequence。   seq_reset(''EXAMPLE_SEQ'')  
create or replace procedure seq_reset(v_seqname varchar2as   
 n 
number(10);    
 tsql 
varchar2(100);    
 
begin   
execute immediate 'select '||v_seqname||'.nextval from dual' into n;    
n:
=-(n-1);    
tsql:
='alter sequence '||v_seqname||' increment by '|| n;    
execute immediate tsql;    
execute immediate 'select '||v_seqname||'.nextval from dual' into n;    
tsql:
='alter sequence '||v_seqname||' increment by 1';    
execute immediate tsql;    
 
end seq_reset;  

/* 
/begin 
 seq_reset('EXAMPLE_SEQ');
end;
 
*/

 
/************JOB TEST   
create or replace procedure Pro_test as
 begin
insert into test( id,no )values('test',to_char(sysdate,'yyyymmdd hh24:mi:ss'));
commit;
end Pro_test;

--delete from test where id>'2'
alter System set job_queue_processes = 30;

declare 
    job2 number;
    begin
    sys.dbms_job.submit(job2,'Pro_test;',sysdate,'sysdate+(80/(24*60*60))');
    commit;
    end;



declare job11 integer;
    begin
    sys.dbms_job.submit(job11,'seq_reset(''EXAMPLE_SEQ'');',sysdate,'sysdate+(180/(24*60*60))');
    commit;
    end;
    
    select * from test
    
 
begin 
 Pro_test;
 --seq_reset('seq_1');
end;
select seq_1.nextval from dual;
    
       --删除JOB
    connect scott/tiger@库名
    select job,log_user,what from user_jobs;
    select job,log_user,what from dba_jobs;
    execute dbms_job.remove(1);     
    
************************
*/
 
 
 
--创建一个JOB,让其每天零点的时候调用重置序列的过程
declare       
      job1   
integer;       
begin       
      sys.dbms_job.submit(job1 ,  
'seq_reset(''EXAMPLE_SEQ'');', to_date('20080218   00:00:01',   'yyyymmdd   hh24:mi:ss'), --   计划的初次执行日期,请根据具体情况设定       
    'to_date(to_char(sysdate+1,''yyyymmdd'')||''00:00:01'',''yyyymmdd   hh24:mi:ss'')');       
      
commit;       
  
end
 
 
 
 
原创粉丝点击