ITPUB??ì3
ITPUB论坛 » Oracle开发 » for v in ( *****) loop shape 问题

标题: for v in ( *****) loop shape 问题
离线 ekunge
中级会员



精华贴数 0
个人空间 0
技术积分 533 (3574)
社区积分 0 (414537)
注册日期 2005-5-19
论坛徽章:0
      
      

发表于 2008-6-30 14:55 
for v in ( *****) loop shape 问题

在网上看到一个课程,看到一个用法,
declare
     type newtype   is table of  demo.last_name%type  INDEX BY BINARY_INTEGER;
     shape newtype;
     i number;
     j number;
     begin
           dbms_output.put_line('beginforall:'||to_char(sysdate,'yyyy hh24:mi:ss'));
            for v in (select rownum,last_name from emp) loop
            shape(v.rownum):=v.last_name;
           end loop;
        select count(*) into i from emp;
         forall j in 1..i
         insert into demo
         values(shape(j));
       dbms_output.put_line('endforall'||to_char(sysdate,'yyyy hh24:mi:ss'));
    end;
/
beginforall:2008 15:55:31                                                      
endforall2008 15:55:32                                                         

PL/SQL 过程已成功完成。
执行效率比
begin
         dbms_output.put_line('begin:'||to_char(sysdate,'yyyy hh24:mi:ss'));
         for v in (select * from emp) loop
             insert into demo
             values(v.last_name);
         end loop;
         dbms_output.put_line('end:'||to_char(sysdate,'yyyy hh24:mi:ss'));
    end;
    /
begin:2008 15:53:42                                                            
end:2008 15:53:51                                                               

PL/SQL 过程已成功完成。
这个要快。我自己试了,也确实是快。
但是,有个地方没有太理解。
for v in (select rownum,last_name from emp) loop
            shape(v.rownum):=v.last_name;
           end loop;
        select count(*) into i from emp;
         forall j in 1..i
         insert into demo
         values(shape(j));
1、这里的  shape(v.rownum):=v.last_name;  的意义是什么
2、如果我是要insert into table_1 (column1,column2),也就是说要插入多个字段的话,要如何来处理。


__________________
看贴长见识发贴求真知
只看该作者    顶部
离线 sunfly1983
初级会员


精华贴数 0
个人空间 0
技术积分 736 (2539)
社区积分 372 (1628)
注册日期 2006-10-14
论坛徽章:4
授权会员2008北京奥运纪念徽章:射箭2008北京奥运纪念徽章:拳击2008北京奥运纪念徽章:曲棍球  
      

发表于 2008-6-30 15:04 
shape是个对象类型数组吧!


只看该作者    顶部
离线 caizhuoyi
Oracle Stranger


精华贴数 2
个人空间 0
技术积分 1504 (1108)
社区积分 445 (1472)
注册日期 2006-3-1
论坛徽章:3
授权会员2008北京奥运纪念徽章:棒球数据库板块每日发贴之星   
      

发表于 2008-6-30 15:13 
回复 #1 ekunge 的帖子

1、这里的  shape(v.rownum):=v.last_name;  的意义是什么
index by table,是一个collection。
2、如果我是要insert into table_1 (column1,column2),也就是说要插入多个字段的话,要如何来处理。
声明:type newtype   is table of  demo%rowtype  INDEX BY BINARY_INTEGER;


__________________
我不在江湖,但江湖中有我的传说;
我身在江湖,江湖里却没有我的传说。
只看该作者    顶部
离线 wangfans


精华贴数 3
个人空间 20
技术积分 5395 (235)
社区积分 5666 (258)
注册日期 2006-11-29
论坛徽章:52
现任管理团队成员金牌徽章奥运纪念徽章2008北京奥运纪念徽章:篮球2008北京奥运纪念徽章:足球2008北京奥运纪念徽章:自行车
2008北京奥运纪念徽章:跳水2008北京奥运纪念徽章:棒球每日论坛发贴之星2008北京奥运纪念徽章:网球2008年新春纪念徽章ITPUB新首页上线纪念徽章

发表于 2008-6-30 15:24 
怎么会前面那个快呢?多走了一步还快? 怪异~~


__________________
-------------------------------------------------
Life is always like this !
-------------------------------------------------
MSN: wangfans@163.com
-------------------------------------------------
只看该作者    顶部
离线 飘渺一尘烟
初级会员



精华贴数 0
个人空间 0
技术积分 11 (80396)
社区积分 1 (38891)
注册日期 2005-8-30
论坛徽章:0
      
      

发表于 2008-6-30 15:37 
forall 是批量方式,笔for loop这种方式快


只看该作者    顶部
离线 visual2006



精华贴数 0
个人空间 0
技术积分 768 (2435)
社区积分 4 (18236)
注册日期 2006-7-23
论坛徽章:1
      
      

发表于 2008-6-30 15:40 
集合操作比单个元素循环肯定快些。


只看该作者    顶部
离线 ekunge
中级会员



精华贴数 0
个人空间 0
技术积分 533 (3574)
社区积分 0 (414537)
注册日期 2005-5-19
论坛徽章:0
      
      

发表于 2008-6-30 15:45 


QUOTE:
原帖由 caizhuoyi 于 2008-6-30 15:13 发表
1、这里的  shape(v.rownum):=v.last_name;  的意义是什么
index by table,是一个collection。
2、如果我是要insert into table_1 (column1,column2),也就是说要插入多个字段的话,要如何来处理。
声明:type newtype   is table of  demo%rowtype  INDEX BY BINARY_INTEGER;

不好意思,我对于这个1、这里的  shape(v.rownum):=v.last_name;  的意义是什么
index by table,是一个collection。 还是不太理解。
如果我是需要插入多个字段的话,这个地方要如何改。
前面改成 type newtype   is table of  demo%rowtype  INDEX BY BINARY_INTEGER; [/quote]
这个我是知道的,但是  shape(v.rownum):=v.last_name 这句要如何改?
这个应该和最后面的那个 insert into demo    values(shape(j)) 这里有关,
如果是多字段的话, 这2个地方分别要如何修改。
抱歉,对这块知识几乎完全不了解,但是希望能学习一下。
请高手赐教。


__________________
看贴长见识发贴求真知
只看该作者    顶部
离线 wangfans


精华贴数 3
个人空间 20
技术积分 5395 (235)
社区积分 5666 (258)
注册日期 2006-11-29
论坛徽章:52
现任管理团队成员金牌徽章奥运纪念徽章2008北京奥运纪念徽章:篮球2008北京奥运纪念徽章:足球2008北京奥运纪念徽章:自行车
2008北京奥运纪念徽章:跳水2008北京奥运纪念徽章:棒球每日论坛发贴之星2008北京奥运纪念徽章:网球2008年新春纪念徽章ITPUB新首页上线纪念徽章

发表于 2008-6-30 15:45 
呵呵, 看错了,我还以为一样呢


__________________
-------------------------------------------------
Life is always like this !
-------------------------------------------------
MSN: wangfans@163.com
-------------------------------------------------
只看该作者    顶部
离线 mychary
高级会员



来自 合肥
精华贴数 0
个人空间 0
技术积分 6770 (180)
社区积分 158 (2635)
注册日期 2003-9-18
论坛徽章:9
ITPUB元老会员2007贡献徽章会员2006贡献徽章授权会员2008北京奥运纪念徽章:柔道2008北京奥运纪念徽章:花样游泳
数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星   

发表于 2008-6-30 15:47 
for v in (select rownum,last_name from emp) loop
  
for v in (select * from emp) loop
----游标的sql语句是不一样的。 可比性差了点


只看该作者    顶部
离线 wangfans


精华贴数 3
个人空间 20
技术积分 5395 (235)
社区积分 5666 (258)
注册日期 2006-11-29
论坛徽章:52
现任管理团队成员金牌徽章奥运纪念徽章2008北京奥运纪念徽章:篮球2008北京奥运纪念徽章:足球2008北京奥运纪念徽章:自行车
2008北京奥运纪念徽章:跳水2008北京奥运纪念徽章:棒球每日论坛发贴之星2008北京奥运纪念徽章:网球2008年新春纪念徽章ITPUB新首页上线纪念徽章

发表于 2008-6-30 16:03 


QUOTE:
原帖由 mychary 于 2008-6-30 15:47 发表
for v in (select rownum,last_name from emp) loop
  
for v in (select * from emp) loop
----游标的sql语句是不一样的。 可比性差了点

我觉得问题不在这里,是在FOR ALL上面


__________________
-------------------------------------------------
Life is always like this !
-------------------------------------------------
MSN: wangfans@163.com
-------------------------------------------------
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问