---如果更新下面的备注信息
create table test1(
seq_no number(10), -- 序号
type1 char(1), --- 类型1
type2 char(4), --类型2
amt number(10,2), --金额
char(6)); --备注 前4位为 从1递增的序列 不足4位,前补0
--第五位 为 页数 每两条记录为一页 依次递增 如果大于9的话,直接赋值为9
--第六位 为总页数 该类型的总条数/2 小数点采用进一法
请实现下如何更新 信息
seq_no type1 type2 amt
1 1 1001 100 000114
3 1 1001 100 000114
4 1 1001 100 000124
5 1 1001 100 000124
6 1 1001 100 000134
7 1 1001 100 000134
8 1 1001 100 000144
9 1 1002 100 000212
10 1 1002 100 000212
11 1 1002 100 000222
12 1 1002 100 000222
13 2 1001 100 000111
14 2 1001 100 000111
15 2 1002 100 000213
16 2 1002 100 000213
17 2 1002 100 000223
18 2 1002 100 000223
19 2 1002 100 000233
20 2 1003 100 000116
21 2 1003 100 000116
22 2 1003 100 000126
23 2 1003 100 000126
24 2 1003 100 000136
25 2 1003 100 000136
26 2 1003 100 000146
27 2 1003 100 000146
28 2 1003 100 000156
29 2 1003 100 000156
30 2 1003 100 000116
create table test1(
seq_no number(10), -- 序号
type1 char(1), --- 类型1
type2 char(4), --类型2
amt number(10,2), --金额
char(6)); --备注 前4位为 从1递增的序列 不足4位,前补0
--第五位 为 页数 每两条记录为一页 依次递增 如果大于9的话,直接赋值为9
--第六位 为总页数 该类型的总条数/2 小数点采用进一法
请实现下如何更新 信息
seq_no type1 type2 amt
1 1 1001 100 000114
3 1 1001 100 000114
4 1 1001 100 000124
5 1 1001 100 000124
6 1 1001 100 000134
7 1 1001 100 000134
8 1 1001 100 000144
9 1 1002 100 000212
10 1 1002 100 000212
11 1 1002 100 000222
12 1 1002 100 000222
13 2 1001 100 000111
14 2 1001 100 000111
15 2 1002 100 000213
16 2 1002 100 000213
17 2 1002 100 000223
18 2 1002 100 000223
19 2 1002 100 000233
20 2 1003 100 000116
21 2 1003 100 000116
22 2 1003 100 000126
23 2 1003 100 000126
24 2 1003 100 000136
25 2 1003 100 000136
26 2 1003 100 000146
27 2 1003 100 000146
28 2 1003 100 000156
29 2 1003 100 000156
30 2 1003 100 000116
create table test1(
seq_no number(10),
type1 char(1),
type2 char(4),
amt number(10,2),
char(6));
详细说明:
seq_no -- 序号
type1 --- 类型1
type2 --类型2
amt --金额
--备注共有6位字符 其中
前4位为 从1递增的序列 不足4位,前补0
第五位 为 页数 每两条记录为一页 依次递增 如果大于9的话,直接赋值为9
第六位 为总页数 该类型的总条数/2 小数点采用进一法 二、描述需要做的事情
上述一得表结构中 前4个字段
seq_no -- 序号
type1 --- 类型1
type2 --类型2
amt --金额
中有数据,现在需要写一个update语句
根据前4个字段,来更新 字段
三、表中数据数据 以及需要更新上去的内容
seq_no type1 type2 amt 需要更新到上的值
1 1 1001 100 000114
3 1 1001 100 000114
4 1 1001 100 000124
5 1 1001 100 000124
6 1 1001 100 000134
7 1 1001 100 000134
8 1 1001 100 000144
9 1 1002 100 000212
10 1 1002 100 000212
11 1 1002 100 000222
12 1 1002 100 000222
13 2 1001 100 000111
14 2 1001 100 000111
15 2 1002 100 000213
16 2 1002 100 000213
17 2 1002 100 000223
18 2 1002 100 000223
19 2 1002 100 000233
20 2 1003 100 000116
21 2 1003 100 000116
22 2 1003 100 000126
23 2 1003 100 000126
24 2 1003 100 000136
25 2 1003 100 000136
26 2 1003 100 000146
27 2 1003 100 000146
28 2 1003 100 000156
29 2 1003 100 000156
30 2 1003 100 000116
这样描述可以吗 ?
这个跟seq_no, type1, type2, amt有什么关系吗?
根据seq_no, type1, type2, amt取值规则不清晰啊
第六位 为总页数 该类型的总条数(指的是?)/2 小数点采用进一法
seq_no type1 type2 amt 需要更新到上的值
1 1 1001 100 000114
3 1 1001 100 000114
4 1 1001 100 000124
5 1 1001 100 000124
6 1 1001 100 000134
7 1 1001 100 000134
8 1 1001 100 000144类型1 为1 类型2为1001 的数据总条数是8条 每页2条 第六位总页数赋值为4
不好意思刚才没有看清楚,现在重新回复下 谢谢你的关注
--前4位为 从1递增的序列 不足4位,前补0
这个跟seq_no, type1, type2, amt有什么关系吗?===》 对前4位来说,类型1相同,类型2不同的数据 从1递增
也就是说 随着类型2的变化 递增
类型1变化后 前4位 重新变成从1开始
seq_no type1 type2 amt 需要更新到上的值 1 1 1001 100 000114
3 1 1001 100 000114
8 1 1001 100 000144
9 1 1002 100 000212
10 1 1002 100 000212
13 2 1001 100 000111
14 2 1001 100 000111
15 2 1002 100 000213
16 2 1002 100 000213 这个可以不用考虑 --这个我可以实现对于第五位的值来说 seq_no type1 type2 amt 需要更新到上的值
1 1 1001 100 000114
3 1 1001 100 000114
4 1 1001 100 000124
5 1 1001 100 000124
6 1 1001 100 000134
7 1 1001 100 000134
8 1 1001 100 000144第五位为1 表示第一页
1 1 1001 100 000114
3 1 1001 100 000114
第五位为2 表示第二页
4 1 1001 100 000124
5 1 1001 100 000124
第五位为3 表示第三页
6 1 1001 100 000134
7 1 1001 100 000134
第五位为4 表示第四页
8 1 1001 100 000144类型1 为1 类型2为1001 的数据总条数是8条 每页2条 第六位总页数赋值为4
批量更新,采用cusor一样可以啊
create or replace procedure pro_update
is
--定义cursor和结果变量rs:
cursor cur is select * from tab for update;
rs tab%rowtype;
begin
open cur;
loop
fetch cursor into rs ;
exit when cursor%notfound;
--在这里面进行判断,作相应的处理,并更新该循环里的那笔资料
--可以通过控制语句来实现的更新目的
....
....
end loop;
commit;
end;
SEQ_NO TYPE1 TYPE2 AMT MARK
----------- ----- ----- ------------ ------
1 1 1001 100.00
3 1 1001 100.00
4 1 1001 100.00
5 1 1001 100.00
6 1 1001 100.00
7 1 1001 100.00
8 1 1001 100.00
9 1 1002 100.00
10 1 1002 100.00
11 1 1002 100.00
12 1 1002 100.00
13 2 1001 100.00
14 2 1001 100.00
15 2 1002 100.00
16 2 1002 100.00
17 2 1002 100.00
18 2 1002 100.00
19 2 1002 100.00
20 2 1003 100.00
21 2 1003 100.00
SEQ_NO TYPE1 TYPE2 AMT MARK
----------- ----- ----- ------------ ------
22 2 1003 100.00
23 2 1003 100.00
24 2 1003 100.00
25 2 1003 100.00
26 2 1003 100.00
27 2 1003 100.00
28 2 1003 100.00
29 2 1003 100.00
30 2 1003 100.00
29 rows selected
SQL>
SQL> select seq_no,type1,type2,amt,lpad(dense_rank()over(partition by type1 order by type2 ),4,'0')||
2 case when ceil( row_number()over(partition by type1,type2 order by seq_no)/2)>9 then 9 else ceil( row_number()over(partition by type1,type2 order by seq_no)/2) end ||
3 case when ceil(count(*)over(partition by type1,type2)/2)>9 then 9 else ceil(count(*)over(partition by type1,type2)/2) end
4 from test1;
SEQ_NO TYPE1 TYPE2 AMT LPAD(DENSE_RANK()OVER(PARTITIO
----------- ----- ----- ------------ --------------------------------------------------------------------------------
1 1 1001 100.00 000114
3 1 1001 100.00 000114
4 1 1001 100.00 000124
5 1 1001 100.00 000124
6 1 1001 100.00 000134
7 1 1001 100.00 000134
8 1 1001 100.00 000144
9 1 1002 100.00 000212
10 1 1002 100.00 000212
11 1 1002 100.00 000222
12 1 1002 100.00 000222
13 2 1001 100.00 000111
14 2 1001 100.00 000111
15 2 1002 100.00 000213
16 2 1002 100.00 000213
17 2 1002 100.00 000223
18 2 1002 100.00 000223
19 2 1002 100.00 000233
20 2 1003 100.00 000316
21 2 1003 100.00 000316
SEQ_NO TYPE1 TYPE2 AMT LPAD(DENSE_RANK()OVER(PARTITIO
----------- ----- ----- ------------ --------------------------------------------------------------------------------
22 2 1003 100.00 000326
23 2 1003 100.00 000326
24 2 1003 100.00 000336
25 2 1003 100.00 000336
26 2 1003 100.00 000346
27 2 1003 100.00 000346
28 2 1003 100.00 000356
29 2 1003 100.00 000356
30 2 1003 100.00 000366
29 rows selected
SQL> 看看这样成不
向你学习啊