CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  基础类

存储过程类型数据窗口调用ORACLE8.1中存储过程返回的记录集(加100分)

楼主johnzhuking(john)2002-09-21 14:04:22 在 PowerBuilder / 基础类 提问

怎样用PB6.5存储过程类型数据窗口调用ORACLE8.1中存储过程返回的记录集(多变量多行多字段)  
  例:  
  orcale:  
   
    create   or   replace   procedure   examp_proc(aa   number,bb   out   varchar2)   is    
        s_id   varchar2(10);  
        s_class   varchar2(10);  
        s_name   varchar2(10);  
        s_dept   varchar2(10);  
        s_report   varchar2(10);  
      begin  
          /*select   emp_id,emp_class,emp_name,emp_dept,emp_report   from   emp   where   emp_class=aa;*/  
        --如何取得记录集,有没有什么比较好的办法.最好都说一下.  
      end  
   
  --   特别急.  
  问题点数:100、回复次数:6Top

1 楼diliver(木头人)回复于 2002-09-21 14:11:33 得分 100

你可建一表。  
  把结果集insert到表里面。  
  Top

2 楼johnzhuking(john)回复于 2002-09-21 14:17:42 得分 0

我建视图不更好?可我是多用户网络实时查询,数据量贼大,数据实时写入更新,多表综合.我要的就是查询速度快.Top

3 楼diliver(木头人)回复于 2002-09-21 14:19:03 得分 0

oracle好象不支持记录集的返回做法。  
  1、你可以见一个表:aa  
        存储过程:  
        '''''''''''  
        ''''''''''  
        insert   into   aa;  
        select   emp_id,emp_class,emp_name,emp_dept,emp_report   from   emp       where   emp_class=aa;  
      '''''''''''''''''  
      '''''''''''''''''''  
  2、在前台做一aa表的数据窗口。  
      统计之时执行存储过程。   retrieve数据窗口就可以得到结果集了。  
      不妨试试  
  Top

4 楼diliver(木头人)回复于 2002-09-21 14:23:52 得分 0

那只有在查询速度方面下工夫了。  
  在emp_class上建一个索引吧。  
  Top

5 楼jlandzpa(jlandzpa)回复于 2002-09-21 22:02:22 得分 0

search   :   ref   cursorTop

6 楼johnzhuking(john)回复于 2002-09-22 22:34:56 得分 0

select   *  
  from   the   (   select   cast(   testrerecordnotabname(1)   as   zmytableType   )  
  from   dual   )   a;  
  比  
  select   *   from   a;  
  数据量大的时候速度要慢很多  
  --------------------------------------------------  
  create   or   replace   type   myqueryType   as   object  
  (  
    line_nbr   varchar2(20),  
    pri_line_nbr   varchar2(20),  
    vn_id   varchar2(20),  
    vn_nbr   varchar2(20),  
    acc_exch_id   varchar2(20),  
    security_password   varchar2(20),  
    serv_cat_id   varchar2(20),  
    so_nbr   varchar2(20),  
    bill_type_id   varchar2(20),  
    cust_id   varchar2(20),  
    addr_id   varchar2(20),  
    agent_id   varchar2(20),  
    sts   varchar2(20)  
  )  
  /  
  create   or   replace   type   myTableType   as   table   of   myqueryType  
  /  
  create   or   replace   function   demo_proc(   serv_id_query   in   varchar2,  
  p_end_row   in   number   )  
  return   myTableType  
  as  
  l_data                           myTableType   :=   myTableType();  
  l_cnt                             number   default   0;  
  begin  
  for   v   in   (   select   distinct   h_serv_acc_nbr.line_nbr   line_nbr,h_serv_acc_nbr.pri_line_nbr   pri_line_nbr,  
                                                h_serv_acc_nbr.vn_id   vn_id,h_serv_acc_nbr.vn_nbr   vn_nbr,  
    h_serv_acc_nbr.acc_exch_id   acc_exch_id,  
                                                            h_serv_acc_nbr.SECURITY_PASSWD   security_password,  
                                                                    h_serv_acc_nbr.serv_cat_id   serv_cat_id,  
    h_serv_acc_nbr.so_nbr   so_nbr,  
                                                                    h_serv.bill_type_id   bill_type_id,  
    h_serv_cust.cust_id   cust_id,  
                                                                    h_serv_addr.addr_id   addr_id,  
    h_serv_agent.agent_id   agent_id,  
                                                                    h_serv.sts   sts  
                                                                          from       h_serv,h_serv_acc_nbr,h_serv_cust,h_serv_agent,h_serv_addr  
  where     h_serv.serv_id   =   h_serv_acc_nbr.serv_id   and    
                h_serv.serv_id   =   h_serv_cust.serv_id   and    
    h_serv.serv_id   =   h_serv_agent.serv_id   and  
    h_serv.serv_id   =   h_serv_addr.serv_id   and    
              h_serv.serv_id   =   serv_id_query   and  
    h_serv.seq   =   h_serv_acc_nbr.seq   and  
    h_serv.seq   =   h_serv_cust.seq   and    
    h_serv.seq   =   h_serv_agent.seq   and  
    h_serv.seq   =   h_serv_addr.seq   )  
  loop  
  l_cnt   :=   l_cnt   +   1;  
  if   (   l_cnt   >=   1   )  
  then  
  l_data.extend;  
  l_data(l_data.count)   :=  
  myqueryType(   v.line_nbr,  
    v.pri_line_nbr   ,  
    v.vn_id   ,  
    v.vn_nbr   ,  
    v.acc_exch_id   ,  
    v.security_password   ,  
    v.serv_cat_id   ,  
    v.so_nbr   ,  
    v.bill_type_id   ,  
    v.cust_id   ,  
    v.addr_id   ,  
    v.agent_id   ,  
    v.sts   );  
  end   if;  
  exit   when   l_cnt   =p_end_row;    
  --exit   when   l_cnt   =l_data.count;    
  end   loop;  
   
  return   l_data;  
  end;  
   
   
  /  
   
   
  /  
  select   v.line_nbr,  
    v.pri_line_nbr   ,  
    v.vn_id   ,  
    v.vn_nbr   ,  
    v.acc_exch_id   ,  
    v.security_password   ,  
    v.serv_cat_id   ,  
    v.so_nbr   ,  
    v.bill_type_id   ,  
    v.cust_id   ,  
    v.addr_id   ,  
    v.agent_id   ,  
    v.sts  
      from   the   (   select   cast(   demo_proc(:serv_id_query,10000)   as   mytableType   )  
                                  from   dual   )   V;  
                                  /  
                                  select   distinct   h_serv_acc_nbr.line_nbr   line_nbr,h_serv_acc_nbr.pri_line_nbr   pri_line_nbr,  
                                                h_serv_acc_nbr.vn_id   vn_id,h_serv_acc_nbr.vn_nbr   vn_nbr,  
    h_serv_acc_nbr.acc_exch_id   acc_exch_id,  
                                                            h_serv_acc_nbr.SECURITY_PASSWD   security_password,  
                                                                    h_serv_acc_nbr.serv_cat_id   serv_cat_id,  
    h_serv_acc_nbr.so_nbr   so_nbr,  
                                                                    h_serv.bill_type_id   bill_type_id,  
    h_serv_cust.cust_id   cust_id,  
                                                                    h_serv_addr.addr_id   addr_id,  
    h_serv_agent.agent_id   agent_id,  
                                                                    h_serv.sts   sts  
                                                                          from       h_serv,h_serv_acc_nbr,h_serv_cust,h_serv_agent,h_serv_addr  
  where     h_serv.serv_id   =   h_serv_acc_nbr.serv_id   and    
                h_serv.serv_id   =   h_serv_cust.serv_id   and    
    h_serv.serv_id   =   h_serv_agent.serv_id   and  
    h_serv.serv_id   =   h_serv_addr.serv_id   and    
              h_serv.serv_id   =   serv_id_query   and  
    h_serv.seq   =   h_serv_acc_nbr.seq   and  
    h_serv.seq   =   h_serv_cust.seq   and    
    h_serv.seq   =   h_serv_agent.seq   and  
    h_serv.seq   =   h_serv_addr.seq   )  
  ;  
  /  
  这样不快啊~~~~~~~~~~~~~~  
  我要快~快~快~快~快~~~~~~~~~~~~~~~~~~~~~~!!!!!!!!!!!!!!!!!!!~~~~~~~~~~~~~Top

相关问题

  • JAVA怎么样调用带返回记录集的存储过程(ORACLE)
  • 在Oracle的存储过程中动态调用存储过程
  • Oracle调用Oracle存储过程?
  • jsp调用Oracle存储过程
  • pb如何调用oracle存储过程
  • 调用Oracle存储过程的问题???
  • vb调用oracle存储过程
  • 如何调用存储过程?请给BCB代码及ORACLE存储过程.
  • 调用oracle存储过程时,要用ref cur 才能返回记录集,请问什么是ref cursor??
  • 急,asp调用oracle存储过程返回记录集出错(80040e21),高手帮忙啊!!!

关键词

  • 存储过程
  • 数据
  • 查询
  • oracle
  • report
  • nbr
  • varchar2
  • emp
  • acc
  • vn

得分解答快速导航

  • 帖主:johnzhuking
  • diliver

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo