之前在帖子 http://www.linuxidc.com/Linux/2012-07/65117.htm 里回答了一些網(wǎng)友的關(guān)于怎么穿件一個(gè)返回記錄集合的存儲(chǔ)過(guò)程。想必很多網(wǎng)友已經(jīng)很明白了,這里就不多講了。
怎么調(diào)用含游標(biāo)的存儲(chǔ)過(guò)程在sqlplus
Oracle怎么執(zhí)行帶游標(biāo)的過(guò)程?-
給你一個(gè)例子
--游標(biāo)使用(游標(biāo)其實(shí)是一個(gè)放入內(nèi)存臨時(shí)表)
declare
money cms3_simcard.card_fee%type :=0; --定義與表字段相同類(lèi)型
cursor mycursor is --定義游標(biāo)
select * from cms3_simcard
where return_flag = 1 and msisdn like '138%';
my_record mycursor%rowtype; --定義游標(biāo)記錄類(lèi)型
Counter int :=0;
begin
open mycursor; --打開(kāi)游標(biāo)
if mycursor%isopen then --判斷打開(kāi)成功
loop --循環(huán)獲取記錄集
fetch mycursor into my_record; --獲取游標(biāo)中的記錄
if mycursor%found then --游標(biāo)的found屬性判斷是否有記錄
dbms_output.put_line(my_record.card_fee);
else
exit;
end if;
end loop;
else
dbms_output.put_line('游標(biāo)沒(méi)有打開(kāi)');
end if;
close mycursor;
end;
如果你要問(wèn)我程序里怎么調(diào)用 那你就不要問(wèn)了 因?yàn)槟莻(gè)太多知道了 很少有人問(wèn)到。 廢話不多說(shuō) 上實(shí)例了
首先看下t1的表結(jié)構(gòu)
SQL> desc T1
名稱(chēng) 是否為空? 類(lèi)型
----------------------------------------- -------- ---------------------
D NOT NULL DATE
A NUMBER(38)
B NUMBER(38)
C NUMBER(38)
看下T1的表里的數(shù)據(jù)情況
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
和上一個(gè)帖子一樣 首先創(chuàng)建一個(gè)包先
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 /
程序包已創(chuàng)建。
創(chuàng)建一個(gè)帶游標(biāo)的的存儲(chǔ)過(guò)程也就是一個(gè)返回記錄集合的存儲(chǔ)過(guò)程
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 /
過(guò)程已創(chuàng)建。
該有的數(shù)據(jù)都有了,接著重點(diǎn)來(lái)了。 調(diào)用存儲(chǔ)過(guò)程返回記錄集合
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 過(guò)程已成功完成。
SQL> 本文出自:億恩科技【mszdt.com】
服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|