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

熟悉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;
/
这个我花了一阵子才弄明白,弄的头都大了,没办法,脑子笨,呵呵,不过现在已经知道了。
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值