可以使用update select 语法进行更新
为泰安等地区用户提供了全套网页设计制作服务,及泰安网站建设行业解决方案。主营业务为网站设计制作、成都网站设计、泰安网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
喜欢研究的可以自行学习下,以便积累
不想浪费时间可以看下面:
UPDATE A SET ID = (SELECT ROWNUM FROM A ORDER BY 时间 DESC)
参考语法:
UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)
WHERE ID IN (SELECT B.ID FROM B WHERE A.ID = B.ID)
如果使用了序列,那么这个跳号的问题只能通过编程来解决,否则是解决不了的。Oracle的序列对象只增加。
可以通过一个触发器来实现序列号字段的处理,一旦插入新数据,就根据扫描的结果,修改序列号字段的值为最大值+1,或者某个值,根据定义的规则确定。
有的财务系统凭证号必须连续,当中间的某一张凭证删除后就有这种需求,要求新产生的凭证号等于删除的那一张。
序列本身没办法直接归零,只能是删掉然后重建。删除序列要用到drop语句和建立的create语句都是ddl语句,在存储过程中是没办法应用的。个人建议写成一个sql脚本,然后在操作系统层面设定为每隔一年运行一次。
可以做到,对结果再一次分组呗,用分析函数,你这个第一行其实没有什么用,就是记录相同的第二列值是数以第几个,
select zaawdm ,
row_number() over(partition by zaawdm order by zaawdm ASC) XH
from table_name
这样就可以了,你的表列的名字起得太不规范了,看着都难受。
递增值序列的起始值设为:378。
CREATE SEQUENCE SEQ_SH
START WITH 378
MAXVALUE 99999999
MINVALUE 0
NOCYCLE
NOCACHE
NOORDER;
可以写个dbms_job定时删除序列并重建。存储过程如下:
create or replace procedure prc_mq_resetsequence(seqname in varchar2) authid current_user is
num number;
begin
select count(*)
into num
from user_sequences
where sequence_name = upper(seqname);
if num 0 then
execute immediate 'drop sequence ' || seqname;
end if;
execute immediate 'create sequence ' || seqname ||
' minvalue 1 maxvalue 9999999999999 start with 1 increment by 1 cache 20';
end;