一、使用游标的理由。
我本是一个用MSSQL多的程序员,所以习惯上是用select 语句的多,但经ORACLE资深应用人员介绍,游标在第一次执行时比select慢,但以后用同一个游标却会快很多。所以现在的ERP里很多东西都用游标来写。
二、游标格式:
普通格式:
declare
cursor rec_ IS
select 语名;
例:
declare
cursor rec_ IS
select ikey,customerName
from customer;
带参数格式:
declare
cursor rec_(pram1 varchar2,...) IS
select 语句;
例:
declare
cursor rec_(name_ varchar2) IS
select ikey,customerName
from customer
where customerName=name_;
三、游标使用
普通格式
取第一行的值。
open rec_;
Fetch rec_ into 变量1,变量2(相对select语句的栏位)
close rec_;
例:
declare
key_ number;
cname_ varchar2(50);
cursor rec_ IS
select ikey,customerName
from customer;
begin
open rec_;
fetch rec_ into key_,cname_;
dbms_output.put_line('key:'||key_||'#name:'||cname_);
close rec_;
end;
取循环值。
for [item] in rec_ loop
变量1:=[item].[col1相对select语句的栏位名];
.......
end loop;
例:
declare
key_ number;
cname_ varchar2(50);
cursor rec_ IS
select ikey,customerName
from customer;
begin
for item_ in rec_ loop
dbms_output.put_line('key:'||rec_.ikey||'#name:'||rec_.customerName );
end loop;
end;
带参数格式:
for item_ in rec_(值1,......) loop
变量1:=[item].[col1相对select语句的栏位名];
.......
end loop;
例:
declare
key_ number;
cname_ varchar2(50);
cursor rec_(cname_ varchar2) IS
select ikey,customerName
from customer
where customerName=cname_;
begin
for item_ in rec_('XX集团') loop
dbms_output.put_line('key:'||rec_.ikey||'#name:'||rec_.customerName );
end loop;
end;
这些都是游标的最基本的应用,游标里面可以嵌套游标,形成多循环。