之前在帖子 http://www.linuxidc.com/Linux/2012-07/65117.htm 里回答了一些网友的关于怎么穿件一个返回记录集合的存储过程。想必很多网友已经很明白了,这里就不多讲了。怎么调用含游标的存储过程在sqlplus
Oracle怎么执行带游标的过程?给你一个例子--游标使用(游标其实是一个放入内存临时表)
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的表结构
- SQL> desc T1
- 名称 是否为空? 类型
- ----------------------------------------- -------- ---------------------
-
- D NOT NULL DATE
- A NUMBER(38)
- B NUMBER(38)
- C NUMBER(38)
看下T1的表里的数据情况
- SQL> select * from t1;
-
- D A B C
- -------------- ---------- ---------- ----------
- 12-3月 -11 102 21 15
- 14-3月 -11 100 58 73
- 15-3月 -11 105 87
和上一个帖子一样 首先创建一个包先
- SQL> create or replace package pkg_package
- 2 as
- 3 type type_cursor is ref cursor;
- 4 type type_record is record
- 5 (
- 6 test01 DATE,
- 7 test02 NUMBER(38),
- 8 test03 NUMBER(38) ,
- 9 test04 NUMBER(38)
- 10 );
- 11 end;
- 12 /
-
- 程序包已创建。
创建一个带游标的的存储过程也就是一个返回记录集合的存储过程
- SQL> create or replace procedure p_temp_procedure
- 2 (
- 3 cur_out_arg out pkg_package.type_cursor
- 4 )
- 5 is
- 6 begin
- 7 open cur_out_arg for select * from T1;
- 8 end;
- 9 /
-
- 过程已创建。
该有的数据都有了,接着重点来了。 调用存储过程返回记录集合
- SQL> declare
- 2 cur_out_arg pkg_package.type_cursor;
- 3 rec_arg pkg_package.type_record;
- 4 begin
- 5 dbms_output.put_line("------------------------");
- 6 p_temp_procedure(cur_out_arg);
- 7 loop
- 8 fetch cur_out_arg into rec_arg;
- 9 exit when cur_out_arg%notfound;
- 10 dbms_output.put_line(rec_arg.test01||" "||rec_arg.test02||" "||rec_a
- rg.test03||""||rec_arg.test04);
- 11 end loop;
- 12 end;
- 13 /
- ------------------------
- 12-3月 -11 102 2115
- 14-3月 -11 100 5873
- 15-3月 -11 105 87
-
- PL/SQL 过程已成功完成。
-
- 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