今天在群里有一个人问一个问题就是根据一个表生成另一个表,我想我刚学pl/sql就想用pl/sql写出来练练手
表t 有两个字段(a varchar2(2),b number(2,2)) 里面有数据是(A,1)(B,1)(C,1)(D,2)(E,2) 要生成表的数据是(A,1001)(B,1002)(C,1003)(D,2001)(E,2002)由于我刚学pl/sql学的仅仅是声明变量和循环一块对rank()函数over()函数都还不知道于是我就想创建新表扫描老表的内容插入进去实现过程代买如下:
declare
k int:=1000;
j int:=2000;
begin
execute immediate'create table t2 as select * from t';
for i in (select a,b from t) loop
case i.b
when 1 then
k :=k + 1;
execute immediate'update t2 set b=:1 where a=:2' using k, i.a;
when 2 then
j :=j+ 1;
execute immediate'update t2 set b=:1 where a=:2' using j, i.a;
end case;
end loop;
end;
写了半天总算出来了,后来看别人的语句就一个查询实现了:
select a,b*1000+rank from ( select t.a,t.b,rank() over(partion by t.b order by a) rank from t);
原来可以有这么简单的方法可以实现。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27668565/viewspace-751192/
,如需转载,请注明出处,否则将追究法律责任。