oracle中的游标
发布日期:2021-05-08 13:40:48 浏览次数:28 分类:精选文章

本文共 1725 字,大约阅读时间需要 5 分钟。

游标(光标Cursor)

在java程序中有集合的概念,那么在pl/sql中也会用到多条记录,这时就要用到游标,游标可以存储查询返回的多条数据。

语法:

cursor   游标名   [(参数名     数据类型, 参数名     数据类型,····)]   is   select语句;

例如:   cursor   emps   is   select   *   from   emp;

在这里插入图片描述
在这里插入图片描述
范例一:(无参数)
在这里插入图片描述
用游标方式输出emp1表的name、job、hdate、sal

declare   cursor emps is select * from emp1;   rs emp%rowtype;begin  --1.开启游标  open emps;  --2.从游标中提取数据  loop    fetch emps into rs;    exit when emps%notfound;    dbms_output.put_line('name--'||rs.name||'    job--'||rs.job||'    birthday--'||to_char(rs.hdate,'fmyyyy-mm-dd')||'      salary--'||rs.sal);  end loop;  --3.关闭游标  close emps;end;

在这里插入图片描述

范例二:(有参数)
在这里插入图片描述
用游标方式输出指定部门下所有员工的dept_id、name、job、hdate、sal

declare  cursor emps(emp_id emp1.id%type) is     select * from emp1 where dept_id=emp_id;  rs emp%rowtype;begin  open emps(10);  loop    fetch emps into rs;    exit when emps%notfound;    dbms_output.put_line('dept_id--'||rs.dept_id||'    name--'||rs.name||'    job--'||rs.job||'    birthday--'||to_char(rs.hdate,'fmyyyy-mm-dd')||'      salary--'||rs.sal);  end loop;  close emps;end;

在这里插入图片描述

范例三:(有参数)

在这里插入图片描述

为部门号为10的所有员工涨1000的工资

declare  cursor pc(dno emp1.dept_id%type) is    select id from emp1 where dept_id=dno;  pno emp1.id%type;begin  open pc(10);  loop    fetch pc into pno;    exit when pc%notfound;    update emp1 t set t.sal=t.sal+1000 where t.id=pno;   end loop;   close pc;end;

在这里插入图片描述

系统引用游标

在这里插入图片描述

declare  emps sys_refcursor;  rs emp1%rowtype;begin  open emps for select * from emp1;  loop    fetch emps into rs;    exit when emps%notfound;    dbms_output.put_line(rs.name||' earns '||rs.sal||'$ every month');    end loop;  close emps;end;

使用for循环打开游标

使用for循环来遍历游标,会自动申明一个记录型的变量、自动打开游标、自动赋值、自动关闭游标。

在这里插入图片描述
在这里插入图片描述

declare  cursor emps is select * from emp1;begin  for rs in emps loop    dbms_output.put_line(rs.name||'---'||rs.sal);  end loop;end;

在这里插入图片描述

上一篇:oracle的存储过程和存储函数
下一篇:oracle里的索引

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年03月29日 13时32分29秒