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

存储过程

楼主dqwuhan()2002-07-05 15:08:17 在 Oracle / 基础和管理 提问

我建立的一个存储过程如下:  
  create   procedure   p1  
  is  
  begin  
  select   *   from   test;  
  end;  
  出现语法错误,请问为什么,如何解决? 问题点数:50、回复次数:12Top

1 楼fanzhaoyou(fanzhaoyou)回复于 2002-07-05 15:13:34 得分 0

在BEGIN与END之间不能这样写:  
  我给你一个存储过程你看看语法:  
  CREATE   OR   REPLACE   PROCEDURE   "GETSERIES"   (  
          vl_name   IN   VARCHAR2,  
          vl_id       IN   VARCHAR2,  
          vl_len     IN   INTEGER,  
          vl_out   OUT   VARCHAR2  
    )  
  IS  
          cnt     INTEGER;  
          temp   INTEGER;  
          vl_zz   VARCHAR(30);  
  BEGIN  
          SELECT   count(*)   INTO   temp   FROM   t_sysinfo   WHERE  
                  rtrim(INFONAME)=rtrim(vl_name);  
          IF   (temp<>0)   THEN  
          BEGIN  
              SELECT   info   INTO   temp   FROM   t_sysinfo   WHERE   rtrim(INFONAME)=rtrim(vl_name);  
              temp:=temp+1;  
              UPDATE   t_sysinfo   SET   info=temp   WHERE   rtrim(infoname)=rtrim(vl_name);  
          END;  
          ELSE  
          BEGIN  
            temp:=1;  
            INSERT   INTO   t_sysinfo(infoname,info)   VALUES(vl_name,to_char(temp));  
          END;  
          END   IF;  
   
          SELECT  
  concat(substr('00000000000000000000',1,20-length(to_char(temp))),to_char(temp))                               c   into     vl_zz             FROM   dual;  
   
          if   vl_id   is   not   null     then  
                SELECT  
                concat(RTRIM(vl_id),substr(vl_zz,21-vl_len+length(RTRIM(vl_id)),vl_len))   c                   into   vl_out  
                FROM   dual;  
          else  
                  SELECT  
                  substr(vl_zz,21-vl_len,vl_len)   c   into   vl_out  
                  FROM   dual;  
          end   if;  
  END;  
  Top

2 楼3yugui(亿硅)回复于 2002-07-05 15:15:52 得分 0

这个只能在9i中可以,用来返回纪录集。  
  8i中,语句必须是PL/SQL语句。  
  如:select   aa   into   a   from   bb;Top

3 楼biti_rainy(biti_rainy)回复于 2002-07-05 15:41:40 得分 0

查询出来的结果必须有变量接收Top

4 楼whchh(chengj)回复于 2002-07-05 15:44:52 得分 0

intoTop

5 楼dqwuhan()回复于 2002-07-05 16:51:17 得分 0

但是我想返回多条记录呢?Top

6 楼yfr(阿毛)回复于 2002-07-05 19:12:21 得分 0

对返回多条纪录的语句需要使用游标Top

7 楼CHENGXB(阿困)回复于 2002-07-05 19:30:22 得分 0

你们都对,^_^Top

8 楼sun9989(一品黄山)回复于 2002-07-05 21:08:47 得分 0

我刚学时也犯过一样的错,  
   
  3yugui(亿硅)   说的让我高兴:    
      这个只能在9i中可以,用来返回纪录集。  
     
  Top

9 楼ATCG(novel gene)回复于 2002-07-05 21:19:00 得分 0

给你一个使用游标的存储过程的例子,供参考!,也可以直接套用!  
   
  create   or   replace   procedure   test  
  as  
      type   ref_cursor   is   ref   cursor;  
      cursor_test   ref_cursor;  
      my_name   test.name%type;  
  begin  
      open   cursor_library   for  
                select   name   from   test;  
      loop  
                fetch   cursor_test   into   my_name;  
                exit   when   cursor_test%notfound;  
      end   loop;  
      close   cursor_test;  
  end   test;  
  /Top

10 楼ATCG(novel gene)回复于 2002-07-05 21:21:34 得分 50

SORRY   刚才的存储过程有错误,应该这样!  
   
  create   or   replace   procedure   test  
  as  
      type   ref_cursor   is   ref   cursor;  
      cursor_test   ref_cursor;  
      my_name   test.name%type;  
  begin  
      open   cursor_test   for  
                select   name   from   table;  
      loop  
                fetch   cursor_test   into   my_name;  
                exit   when   cursor_test%notfound;  
      end   loop;  
      close   cursor_test;  
  end   test;  
  /  
  Top

11 楼zhoubf725(zhoubf725)回复于 2002-07-05 22:28:53 得分 0

select   into   就可以了。  
  不过你返回的记录太多了。听楼上的吧,等你的系统update到9i的时候再试试。Top

相关问题

  • 存储过程
  • 存储过程
  • 存储过程
  • 存储过程
  • 存储过程
  • 存储过程
  • 存储过程
  • 存储过程
  • 存储过程
  • 存储过程

关键词

  • 存储过程
  • vl
  • cursor
  • rtrim
  • infoname
  • sysinfo
  • zz
  • temp
  • ref
  • varchar2

得分解答快速导航

  • 帖主:dqwuhan
  • ATCG

相关链接

  • Oracle类图书

广告也精彩

反馈

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