把数据取出来,就要用到游标咯
游标分2种,一是隐式游标,一是显式游标。
显式游标是指要我们去给这游标起个名字,打开关闭都是由程序员自己来。
隐式游标是指没有名字的游标,打开关闭都是由系统在后台做。
只要是把数据取出来,都要用到游标。剩下的问题就是什么时候使用显式游标,什么时候使用隐式游标。
我的经验是,任何时候都应该使用显式游标。代码参考
:
function get_name(p_empno in varchar2) return varchar2 is
retval emp.name%type;
cursor csr_emp is--声明显式游标
select name from emp where empno=p_empno;
begin
open csr_emp;--打开游标
fetch csr_emp into retval;--把数据取出来
close csr_emp;--关闭游标
return retval;
end;
隐式游标是指用select into语句。当没有数据时有no data found 的异常。有多条数据时会有to many rows的异常。所以在使用隐式游标时,都需要加上异常捕获.实际情况是,我们总是懒得捕获异常,从而代码质量变得很差。
代码参考:
function get_name(p_empno in varchar2) return varchar2 is
retval emp.name%type;
begin
select name into retval
from emp
where empno=p_empno;
return retval;
exception when no_data_found then
...
exception when others then
...
end;
上面的代码都没测试。希望对你有帮助
Oracle使用工作区来执行SQL语句,并保存处理信息。PL/SQL可以让我们使用游标来为工作区命名,并访问存储的信息。游标的类型有两种:隐式和显式。 PL/SQL会为所有的SQL数据操作声明一个隐式的游标,包括只返回一条记录的查询操作。对于返回多条记录的查询,我们可以显式地声明一个游标来处理每一条记录。
DECLARE
CURSOR c1 IS
SELECT empno, ename, job
FROM emp
WHERE deptno = 20;
再open,fetch,close
PL/SQL包含隐式游标和显式游标等两种游标类型,其宗隐式游标用于处理select into和DML语句,而显示游标则专门用于处理select语句返回的多行数据。
使用显式游标
为了处理select语句返回的多行数据,可以使用显式游标,使用显式游标包括定义游标,打开游标,提取数据和关闭游标四个阶段。
例子:
declare
curosr emp_cursor is
select ename,sal from emp
where deptno=10;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open emp_cursor;
loop
fetch emp_cursor into v_ename,v_sal;
exit when emp_cursor%notfound;
dbms_output.put_line(v_name||': '||v_sal);
end loop;
close emp_cursor;
end;
详细游标等用法,推荐你看一本书:
《精通oracle.10g.PL.SQL编程》