Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > 关于Oracle中select * from where 的存储过程
【标  题】:关于Oracle中select * from where 的存储过程
【关键字】:Oracle,select,from,where
【来  源】:http://blog.csdn.net/camio007/archive/2007/03/07/1523314.aspx

关于Oracle中select * from where 的存储过程

Your Ad Here 熟悉SQL Server的人,都会用这样的方法来创建存储过程:(查询student表的信息)
create  procedure  pro_sel_all
as
select * from  student

由于在Oracle中没有一个类型去接受一个结果集,而在SQL Server中却是由数据库系统自动返回结果集,然后显示。故如果我们用类似上面的方法来创建,如下:
create  or  replace  procedure  pro_sel_all
as
begin
select * from  student;
end  procedure  pro_sel_all;
则会报错:Warning: Procedure  created  with  compilation  errors.

那么在解决这个问题的时候有两个方法可以选择,第一种就是用游标来返回结果集合。
create  or  replace  procedure  pro_sel_all

is
 cursor  cur_sel_all  is  select  sno,sname,sage,ssёx from  student; --定义游标
     
c_sno student.sno%type;                                                    --声明变量分别保存student的各列
      c_sname student.sname%type;
      c_sage student.sage%type;
      c_ssex student.ssex%type;
begin
open cur_sel_all;
   loop                                                                --循环取数,并将游标数据填充到返回纪录集合中
     fetch cur_sel_all into c_sno,c_sname,c_sage,c_ssex;
     ёxit when cur_sel_all%NOTFOUND;
   --循环退出条件
     if cur_sel_all%FOUND then
                   --打印数据
       
dbms_output.put_line(c_sno||' '||c_sname||' '||c_sage||' '||c_ssex);   
     end if;
   end loop;
close cur_sel_all;
end;
/

exec pro_sel_all;                                        
--执行存储过程

我们也可以要用包(Package)来完成。在包的说明部分中声明游标和存储过程,在包体中给出存储过程。
则上面的存储过程,写为:
create  or  replace  package  pack_ sel_all        
------创建包的说明部分
as
type  mycursor  is  ref  cursor; --声明游标mycursor;
procedure  pro_sel_all (curp  out  mycursor );
--声明存储过程pro_sel_all;
end  pack_sel_all;
/

create  or  replace  package  body  pack_sel_all
  
------创建包体部分
is
procedure  pro_sel_all(curp  out  cursor)  --curp为游标类型的输出参数
begin

 
open  curp  for --将student表中的信息存放到curp中去
 select * from  student;

end  pro_sel_all;
end  pack_sel_all;
/
这个我花了一阵子才弄明白,弄的头都大了,没办法,脑子笨,呵呵,不过现在已经知道了。
 
oracle的伪列以及伪表:【上一篇】
Oracle中动态建表--学习笔记:【下一篇】
【相关文章】
  • oracle的伪列以及伪表
  • oracle数据库命令行导入导出
  • Oracle开放Oracle App Server与Spring Framework的集成代码
  • SQL Server 中Inner join 和where的效率差异
  • oracle10学习日记-0306sqlplus新建表
  • Oracle EMPTY_BLOB() EMPTY_CLOB()
  • DeviceAnywhere,基于UDP协议的手机计算机C/S结构软件, 附源码
  • truncate,delete,drop的异同点(说明:本文摘自oracle技术用户讨论组)
  • Linux(Unix)下Oracle数据库访问接口程序OCI (Oracle Call Interface)
  • Oracle培训笔记20060406
  • 【随机文章】
  • EZ MP3 Recorder 1.15 注册算法分析(1)
  • 在ORACLE数据库中实现从非归档模式到归档模式的转化
  • 支持全文检索的SQL Server的扩展
  • 遭受拒绝服务攻击事件的分析及对策
  • [VC++]WM_SYSCOMMAND
  • Detailer failed: Network write failure:
  • 实现动态数组 msdn的代码
  • 程序员看财经 之 安防服务
  • 告别cpp&h:hpp文件编写心得
  • ORACLE的基本语法集锦
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.