Welcome 微信登录

首页 / 数据库 / MySQL / Oracle带游标的存储过程在plus中的调用实例

之前在帖子 http://www.linuxidc.com/Linux/2012-07/65117.htm 里回答了一些网友的关于怎么穿件一个返回记录集合的存储过程。想必很多网友已经很明白了,这里就不多讲了。怎么调用含游标的存储过程在sqlplusOracle怎么执行带游标的过程?给你一个例子
--游标使用(游标其实是一个放入内存临时表)
declare
   money cms3_simcard.card_fee%type :=0; --定义与表字段相同类型
   cursor mycursor is --定义游标
          select * from cms3_simcard
          where return_flag = 1 and msisdn like "138%";
   my_record mycursor%rowtype;  --定义游标记录类型
   Counter int :=0;
  
begin
   open mycursor;  --打开游标
   if mycursor%isopen  then  --判断打开成功
   loop --循环获取记录集
     fetch mycursor into my_record; --获取游标中的记录
         if mycursor%found then  --游标的found属性判断是否有记录
            dbms_output.put_line(my_record.card_fee);
         else
            exit;
         end if;
   end loop;
   else
     dbms_output.put_line("游标没有打开");
   end if;
  close mycursor;
end;如果你要问我程序里怎么调用 那你就不要问了 因为那个太多知道了 很少有人问到。 废话不多说 上实例了首先看下t1的表结构
  1. SQL> desc T1  
  2.  名称                                      是否为空? 类型  
  3.  ----------------------------------------- -------- ---------------------   
  4.   
  5.  D                                         NOT NULL DATE  
  6.  A                                                  NUMBER(38)  
  7.  B                                                  NUMBER(38)  
  8.  C                                                  NUMBER(38)  
看下T1的表里的数据情况
  1. SQL> select * from t1;  
  2.   
  3. D                       A          B          C  
  4. -------------- ---------- ---------- ----------   
  5. 12-3月 -11            102         21         15  
  6. 14-3月 -11            100         58         73  
  7. 15-3月 -11            105                    87  
和上一个帖子一样 首先创建一个包先
  1. SQL> create or replace package pkg_package  
  2.   2  as  
  3.   3      type type_cursor is ref cursor;  
  4.   4      type type_record is record  
  5.   5      (  
  6.   6          test01 DATE,  
  7.   7          test02 NUMBER(38),  
  8.   8          test03 NUMBER(38) ,  
  9.   9          test04 NUMBER(38)  
  10.  10      );  
  11.  11  end;  
  12.  12  /  
  13.   
  14. 程序包已创建。  
创建一个带游标的的存储过程也就是一个返回记录集合的存储过程
  1. SQL> create or replace procedure p_temp_procedure  
  2.   2  (  
  3.   3      cur_out_arg out pkg_package.type_cursor  
  4.   4  )  
  5.   5  is  
  6.   6  begin  
  7.   7      open cur_out_arg for select * from T1;  
  8.   8  end;  
  9.   9  /  
  10.   
  11. 过程已创建。  
该有的数据都有了,接着重点来了。  调用存储过程返回记录集合
  1. SQL> declare  
  2.   2      cur_out_arg pkg_package.type_cursor;  
  3.   3      rec_arg pkg_package.type_record;  
  4.   4  begin  
  5.   5      dbms_output.put_line("------------------------");  
  6.   6      p_temp_procedure(cur_out_arg);  
  7.   7      loop  
  8.   8          fetch cur_out_arg into rec_arg;  
  9.   9         exit when cur_out_arg%notfound;  
  10.  10         dbms_output.put_line(rec_arg.test01||" "||rec_arg.test02||" "||rec_a  
  11. rg.test03||""||rec_arg.test04);  
  12.  11      end loop;  
  13.  12  end;  
  14.  13  /  
  15. ------------------------   
  16. 12-3月 -11 102 2115  
  17. 14-3月 -11 100 5873  
  18. 15-3月 -11 105 87  
  19.   
  20. PL/SQL 过程已成功完成。  
  21.   
  22. SQL>  
MySQL和Java时间毫秒之间的转换问题的总结如何个性化设置自己的sql*plus环境相关资讯      Oracle存储过程 
  • Oracle存储过程拼接in语句 & 自定  (今 09:21)
  • 【PL/SQL系列】Oracle存储过程使用  (04月23日)
  • Oracle存储过程及Java调用  (05/28/2015 20:29:33)
  • Java调用Oracle存储过程返回多条结  (04月29日)
  • Oracle中的存储过程简单应用  (04月10日)
  • 判断点是否落在面中的Oracle存储过  (05/09/2015 09:39:30)
本文评论 查看全部评论 (1)
表情: 姓名: 字数


评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 1 楼 小汪 发表于 2012/8/24 11:53:32
要加上set serveroutput on数据才会出来!而且要结尾时候加“/”,否则数据是不会出来的!

set serveroutput on
SQL> declare
2cur_out_arg pkg_package.type_cursor;
3rec_arg pkg_package.type_record;
4begin
5dbms_outp