CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

存储过程的的简单问题,在线等待!

楼主sybase125(c++)2005-06-02 15:44:56 在 Oracle / 基础和管理 提问

我的数据库中有两个表,table   a(cid,cz,ch   .....)   ,table   b(gdm,cid,xtsj,bzw......).我的最终结果是从a中提取cid,cz,ch,在b中提取gdm,cid,xtsj,bzw.两表的数值是以cid   关联。请注意两表中有很多行,要在存储过程中用到游标。请问此存储过程如何写?  
   
   
   
                                                                              答对即给分。  
                                                                                                  谢谢! 问题点数:50、回复次数:7Top

1 楼zsfww1205(努力学习oracle)回复于 2005-06-02 15:56:15 得分 0

感觉需求不是很明确。。。  
  你可以这样:  
  定义两个游标,在第一个游标里面对第二个进行循环调用,如果cid相等就把数据输出来Top

2 楼sybase125(c++)回复于 2005-06-02 16:05:57 得分 0

请再具体讲一下.Top

3 楼zsfww1205(努力学习oracle)回复于 2005-06-02 16:14:29 得分 50

试试这个过程(没测试。。)  
  create   or   replace   procedure   zsf0602   is    
      cursor   o_cursor1   is   select   distinct   cid,cz,ch   from   a       order   by   cid  
      cursor   o_cursor2   is   select   gdm,cid,xtsj,bzw   from   b     order   by   cid    
     
      tmpcida     a.cid%type;  
      tmpcz               cz%type;  
      tmpch               ch%type;  
      tmpcidb     b.cid%type;  
      tmpgdm           gdm%type;  
      tmpxtsj       xtsj%type;  
      tmpbzw             bzw%type;  
      begin  
      open   o_cursor1;  
      fetch   o_cursor1   into   tmpcida,tmpcz,tmpch   ;  
      loop  
          exit   when   not   o_cursor1%found  
           
          open   o_cursor2;  
          fetch   o_cursor2   into   tmpcidb,tmpgdm,tmpxtsj,tmpbzw;  
          loop  
          exit   when   not   o_cursor2%found  
              if   tmpcida   ==   tmpcidb   then    
                    dbms_output.put_line  
                    (tmpcida||',     '||tmpcz||',     '||tmpch||',     '||tmpgdm||',     '||tmpxtsj||',     '||tmpbzw)  
              end   if;    
              fetch   o_cursor2   into   tmpcidb,tmpgdm,tmpxtsj,tmpbzw;    
          end   loop  
          close   o_cursor2;  
          fetch   o_cursor1   into   tmpcida,tmpcz,tmpch   ;  
      end   loop      
  close   o_cursor1;  
  commit;  
  end   zsf0602;  
  Top

4 楼zsfww1205(努力学习oracle)回复于 2005-06-02 16:16:21 得分 0

if   tmpcida   ==   tmpcidb   then    
          dbms_output.put_line(tmpcida||',     '||tmpcz||',     '||tmpch||',     '||tmpgdm||',     '||tmpxtsj||',     '||tmpbzw)  
  end   if;    
   
  参数太长。。。嘿嘿。。  
   
  Top

5 楼Honeymaster(过街老鼠)回复于 2005-06-02 16:55:42 得分 0

按你的意思好像很简单啊.呵呵...因为你说的什么,我看了N遍不知道所云!Top

6 楼sybase125(c++)回复于 2005-06-03 13:32:58 得分 0

aSDASDTop

7 楼sybase125(c++)回复于 2005-06-03 13:41:13 得分 0

请大家给出指点;下面的过程有啥问题!  
  CREATE   OR   REPLACE   procedure   zh_zyx(  
  kssj               in           varchar2,  
  sjsj               in           varchar2,  
  gdmhzm           in           varchar2,  
  gdm                 out         varchar2,  
  cz                   out         varchar2,  
  ch                   out         varchar2,  
  drsj               out         varchar2,  
  dcsj               out         varchar2)  
  as  
  v_cidgdsy               varchar2(16);  
  v_cidclk                 varchar2(16);  
  v_zyxgdm         varchar2(8);  
  v_gdm               varchar2(6);  
  v_xtsj             varchar2(28);  
  v_bzw               varchar2(4);  
  v_cz                 varchar2(10);  
  v_ch                   varchar2(10);  
  cursor   gdsy_cur   is    
    select   gdm,cid,xtsj,bzw   from   yz.zh_gdsy,yz_zh_clk    
    where   xtsj>=kssj   and   xtsj<=sjsj   and   gdm=(select   gdm   from   zh_jnzzyx   where   zyxhzm=gdmhzm);  
    cursor       clk_cur   is  
    select   cid,cz,ch   from   yz.zh_clk   where   cid=v_cidgdsy;  
  begin  
  open   gdsy_cur;    
  fetch   gdsy_cur   into   v_gdm,v_cidgdsy,v_xtsj,v_bzw;    
    loop  
  exit   when   not   gdsy_cur%found  
   
        open     clk_cur;  
  fetch   clk_cur   into   v_cidclk,v_cz,v_ch;  
  loop  
  exit   when   not   clk_cur%found  
          if   v_cidgdsy   =   v_cidclk   then    
              dbms_output.put_line  
  (v_cidgdsy||','||v_cz||','||v_ch||','||v_gdm||','||v_xtsj||','||v_bzw)  
  end   if;    
  fetch   clk_cur   into   v_cidclk,v_cz,v_ch;  
  end   loop  
  close   clk_cur;  
  fetch   gdsy_cur   into   v_gdm,v_cidgdsy,v_xtsj,v_bzw;  
  end   loop      
  close   gdsy_cur;  
  commit;  
  end   zh_zyx;  
   
   
   
  Top

相关问题

  • 一个简单的存储过程的问题,在线等待!
  • 一个关于存储过程的简单的问题<在线等待>
  • 初学者关于存储过程(创建表)的简单问题(在线等待)
  • ◆◆◆简单的问题,关于存储过程的请各位过来看看,在线等待...◆◆◆
  • 存储过程 问题。散分不止! (在线等待)
  • 这个存储过程怎么写?在线等待
  • 急! 在线等待,关于存储过程的问题
  • 调用存储过程和函数!!!!在线等待中.........
  • 急!!!关于函数和存储过程,在线等待中......!!!!!!!!!!!!!!!!
  • 一个有关存储过程的问题,在线等待。

关键词

  • 存储过程
  • xtsj
  • bzw
  • cid
  • varchar2
  • tmpcida
  • tmpcz
  • tmpbzw
  • tmpch
  • tmpcidb

得分解答快速导航

  • 帖主:sybase125
  • zsfww1205

相关链接

  • Oracle类图书

广告也精彩

反馈

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