oracle 怎样使UPDATE 更新序列??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 怎样使UPDATE 更新序列??相关的知识,希望对你有一定的参考价值。

比方说一个表 A id是一个自动生成的序列
id 时间
41 2012-01-01
55 2012-01-02
57 2012-01-03
怎么样用update来更新表A的序列id中的数从1开始 即
id 时间
1 2012-01-01
2 2012-01-02
3 2012-01-03
请大侠们帮忙!!!

参考技术A 可以使用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)
参考技术B 按行排序呗,使用 rownum 就可以了,如:
update 表A set id = rownum追问

要按时间的顺序排列怎么办?时间降序排列

追答

如果排列的话,还是借助临时表吧
create table 表A_tmp as select * from 表A order by 时间;
update 表A_tmp set id = rownum;
delete from 表A;
insert into 表A select * from 表A_tmp;
commit;

参考技术C 楼上所说,把表中当前记录的id按照顺利进行了重置。但新插入记录时,id就不连续了,所以分三步:
1、重置表中id:update 表A set id = rownum
2、获取当前最大id:select max(id) from 表名;
3、重置序列值:alter sequence 序列名称 increment by 表中的最大id值本回答被提问者采纳

oracle 中plsql 怎样写更新一行的语句(高手请进)

oracle 中plsql 怎样写更新一行的语句
两种情况 1、用 update语句
2、用for update游标
在线等,小弟先谢过
不是那种直接写字段的,要整行的,这样可以少写写代码.
谢谢 csuxp2008的答复,但是您的回答不是我确实想问的,
我需要的语句功能是
更新整个一行数据的写法,我用一个rowtype类型的变量 更新current of cur的数据
情况1求update语句写法
tab_rec table1%rowtype;
改变变量tab_rec的值
update table1 set values=tab_rec where id=tab_rec.id;--这句写法不对,想要要这句的写法
情况2 求for update游标的写法
比如
tab_rec table1%rowtype;
--一些定义游标,fetch游标、更新变量tab_rec的操作
--然后
update table1 set values=tab_rel where current of cur;--这句写法不对,想要要这句的写法

你可以用这个语法 update tablename set row =v_rec where id = pi_id;
其中 row 是关键字。
在存储过程中,
1、v_tableRec table%rowtype ; --声明变量
2、v_tableRec.field1 := 'aaa' ;....
3、update tablename set row = v_tableRec where ...;
也可以 insert into tablename values v_tableRec ;
其中 update的语法是我在oracle‘中 试出来的。文档很少,的确可以使用。目前我经常使用 这样的语法,如
v_tableRec table%rowtype;
select * into v_tableRec from tablename where pk=pi_pk ;
--下面仅修改需要更新的字段。
v_tableRec.f1 := f1 ;
v_tableRec.f2 := f2 ;
.....
update tableName set row = v_tableRec ;
这样避免了 update tablename t
set t.f1 = f1,
t.f2 = f2 ....;
避免了名值难以对齐的现象。
我猜想缺点可能是必须更新全字段,比较繁琐(抑或效率不高),不过比起清晰的逻辑来,我更喜欢这样的风格。
参考技术A 简单的update语句

update table_name
set column_name=...

如果是通过游标来遍历整个表,筛选符合条件的记录进行修改,那么可以使用游标来for update。

select .... from .... for update [of column reference] [nowait];
[nowait] 如果得不到访问资源就立即返回。
如果要使用游标修改数据的话,一定要在游标定义中 SELECT 语句中加上 FOR UPDATE。
在游标执行过程中的 UPDATE 语句:
UPDATE....SET...WHERE CRRENT OF cursor_name;
参考技术B 你可以 定义个sql 串,然后使用 execute sql immediately 执行这个语句。

以上是关于oracle 怎样使UPDATE 更新序列??的主要内容,如果未能解决你的问题,请参考以下文章