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 更新序列??的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Bulk Collect and Update from cursor or user Update with Select 子查询

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

oracle中update怎样同时更新一个表中几个字段的值

oracle视图可以update吗

oracle中的存储过程有啥作用,该怎么理解?(数据更新的话用update语句不就完了吗)

oracle中在编写存储过程启动多线程的问题?