如
200808010001,
200808010002,
....
200808020001,
200808020002,
...
此sql中传入日期和一个SEQUENCE(SEQ_ID),请问如何上述列功能?
200808010001,
200808010002,
....
200808020001,
200808020002,
...
此sql中传入日期和一个SEQUENCE(SEQ_ID),请问如何上述列功能?
你最好有具体数据,具体实例出来
select to_char(sysdate,'yyyymmdd')||to_char(SEQ_ID.nextval) from dual;
a b
利用字符串截取,然后取max(b)+1可以实现sequence的功能
我觉得这个sql要解决的问题有
1.用何种方法取到前一天的最大值。
2.何时跨到第二天,即序列重新置为的时机,
drop sequence seq_id;
create sequence SEQ_ID
minvalue 1
maxvalue 99999
start with 1
increment by 1
cache 20;取当天最大值:
select seq_id.currval from dual
执行job是要写存储过程的,而在过程里执行drop和create sequence,必须要给oracle用户授权,不可能给他开放oacle 的dba权限的。
create table seq_x
(seq_no number(12));生成seq_no的SQL语句如下:
select
decode(nvl(max(seq_no),0),
0,to_number(to_char(sysdate,'yyyymmdd')) * 10000 + 1,max(seq_no) + 1) seq_no
from seq_x
where floor(seq_no/10000) = to_number(to_char(sysdate,'yyyymmdd'));
如果数据表中存在当天的数据则取值 max(seq_no) + 1
否则取值 to_number(to_char(sysdate,'yyyymmdd')) * 10000 + 1
红色10000表示你序列号位数,可以更改。
from temp
where temp_date = arg_date and ID = arg_id
用v_max_id + 1不就是你要的结果吗
select youdate||'000'||rn
from(
select row_number() over(order by <日期列> desc nulls last) rn,--日期列是null的排在最后
<日期列> youdate
from test)上面那个比较初级因为000写死了是3个0youdate||lpad(rn,4,'0') --位数是4,不足4位左边补0
每天0点都把该seq drop掉 然后建立;
在里面调用序列,用to_char(sysdate,'yyyy-mm-dd')||seq来拼接;