ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 根据一个表创建另一个表

根据一个表创建另一个表

原创 Linux操作系统 作者:骑风兜风 时间:2012-12-16 18:56:42 0 删除 编辑
今天在群里有一个人问一个问题就是根据一个表生成另一个表,我想我刚学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/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: ORACLE锁机制解读
请登录后发表评论 登录
全部评论

注册时间:2012-10-26

  • 博文量
    7
  • 访问量
    6382