CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

存储过程中的游标问题

楼主lxj2000()2006-07-03 11:48:53 在 Oracle / 基础和管理 提问

我的存储过程如下,为什么打开游标那一句老是出错,提示:出现符号   "FOR"在需要下列之一时:     :=   .   (   @   %   ;   not   null   range         default   character   符号   ":=在   "FOR"   继续之前已插入。  
   
   
  (  
      itable1   varchar,  
      itable2   varchar,  
      ReturnValue   out   number  
  )  
  as  
  begin  
      Declare  
   
          var_sql   varchar2(8000);   --存放构造游标的sql语句  
          type   mycursor   is   ref   cursor;     --定义游标类型  
          mycur   mycursor;                               --定义动态游标  
   
   
              var_sql   :=   'select   a.acct_id,b.acc_nbr,a.acct_item_type_id,a.charge   '  
              ||   'from   '||itable1||'   a,'  
              ||   itable2||'   b   '  
              ||   'where   a.id=b.id   ';  
   
      open   mycur   for   var_sql;               --打开游标  
  .........  
  .........  
  .........  
  .........                           --执行代码  
  问题点数:20、回复次数:8Top

1 楼yuyu1980()回复于 2006-07-03 12:38:05 得分 0

varchar2(8000)   长度是不是越界了?Top

2 楼lxj2000()回复于 2006-07-03 12:43:42 得分 0

改小了也不行Top

3 楼lxj2000()回复于 2006-07-03 13:14:50 得分 0

是csdn的人气不够旺吗,还是分少,分少可以加.Top

4 楼h_lj(贝塔)回复于 2006-07-03 14:19:35 得分 5

as  
  begin  
      Declare  
   
          var_sql   varchar2(8000);   --存放构造游标的sql语句  
          type   mycursor   is   ref   cursor;     --定义游标类型  
          mycur   mycursor;                               --定义动态游标  
  有这么写法的吗?我真的怀疑你是在逗我们。不过还是指出一下吧。  
  1.变量定义要在as之后。并且不要用declare.  
  2.begin要在变量定义之后写。Top

5 楼sozdream(Dream.Zhang)回复于 2006-07-03 16:26:35 得分 5

楼上正解~  
  定义存储过程不需要   declare   关键字~  
  只需要:  
  create   or   replace   procedure   name   as    
        .....--定义  
  begin  
        ...   --内容  
  exception    
        ...   --异常  
  end;  
   
  只有在写test   script时,才需要declare关键字.  
  declare  
        ...   --定义  
  begin    
        ...   --内容  
  exception  
        ...   --异常  
  end;Top

6 楼sozdream(Dream.Zhang)回复于 2006-07-03 16:27:42 得分 5

给你个例子~   我测试通过的.  
   
  create   or   replace   procedure   ex_dsql_cursorvariable(colName   varchar2,   colValue   varchar2)   is  
  --表名,列名等object   schema不确定时,不能使用cursor;  
  --必须使用ref   cursor;   (即cursor   variable)  
  type   CurTypeTerm   is   ref   cursor;  
  curTerm   CurTypeTerm;  
  sqlSelect   varchar(100);  
  recTerm   term%rowtype;  
  begin  
  --千万不可在   :colValue   前后加%,   参照本例中在using时加%.  
  sqlSelect:='select   *   from   term   where   '||colName||'   like   :colValue   ';  
  open   curTerm   for   sqlSelect   using   '%'||colValue||'%';  
   
  loop    
  fetch   curTerm   into   recTerm;  
  exit   when   curTerm%notfound;  
  dbms_output.put_line('Result   '||curTerm%rowcount||':');  
  dbms_output.put_line('         '||recTerm.eng_name);  
  dbms_output.put_line('         '||recTerm.eng_abbr_name);  
  dbms_output.put_line('         '||recTerm.chn_name);  
  end   loop;  
   
  close   curTerm;  
  exception    
  when   others   then  
  dbms_output.put_line(sqlerrm);  
  raise;  
  end;  
  Top

7 楼hhmjenny(麦饼)回复于 2006-07-03 16:54:49 得分 5

CREATE   PROCEDURE   RP_TEST(  
      itable1   varchar,  
      itable2   varchar,  
      ReturnValue   out   number  
  )  
  IS  
  var_sql   varchar2(8000);  
  BEGIN    
    DECLARE    
    CURSOR   C   IS   SELECT   *   FROM   ...;  
   
    BEGIN  
    OPEN   C;  
    LOOP  
  ............  
  END;  
  不知道这种类型的写法是不是你需要的?Top

8 楼cky417(cky417)回复于 2006-10-25 10:55:06 得分 0

hhmjenny(麦饼)的写法合适你Top

相关问题

关键词

得分解答快速导航

  • 帖主:lxj2000
  • h_lj
  • sozdream
  • sozdream
  • hhmjenny

相关链接

  • Oracle类图书

广告也精彩

反馈

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