Oracle游标

目录

在emp表中对某部门的员工薪水增加100元,并显示本次更新操作共涉及了多少员工

 声明一个游标,用于取得部门10的员工的姓名和薪水信息 用记录接收游标中的数据

 参数游标:需要对某一字段进行多值查询

通过键盘录入,查询部门编号为10员工信息 

 查询某部门的员工姓名和薪水

强型游标:

显示员工表中的姓名和工资记录 

 根据输入的字符确定显示哪一张表中的数据


 

显示游标 暂存查询取出的多行数据,然后一行一行地进行处理
使用步骤 :

        ①声明游标: cursor 游标名 is select 语句;
        ②打开游标:声明的游标必须打开后才能使用 open 游标名称;--相当于执行查询语句
        ③使用游标:一般在循环语句中使用fetch语句提取游标中的记录来进行操作
        ④关闭游标:游标使用完毕后,一定要关闭 close 游标名称; 

declare
--定义游标
  cursor mycursor is select * from emp; 
  my_emp emp%rowtype;
begin 
--打开游标
  open mycursor;
--读取游标
  fetch mycursor into my_emp;
  dbms_output.put_line(my_emp.ename||'  '||my_emp.sal);
--关闭游标
  close mycursor;
end;

在emp表中对某部门的员工薪水增加100元,并显示本次更新操作共涉及了多少员工

普通方法: 

declare
  dno number(4):=&d;
  s number(4);
begin
  update emp set sal=sal+100 where deptno=dno;
  select count(*) into s from emp where deptno=dno;
  dbms_output.put_line(s);
end;

 隐式游标:由系统自动创建并管理

declare
  dno number(4):=&d;
begin
  update emp set sal=sal+100 where deptno=dno;
  dbms_output.put_line(sql%rowcount);
end;

 声明一个游标,用于取得部门10的员工的姓名和薪水信息 用记录接收游标中的数据

declare 
  v_name emp.ename%type;
  v_sal emp.sal%type;
  cursor my_cursor is select ename,sal from emp where deptno=10; 
begin 
  open my_cursor;
  loop
    fetch my_cursor into v_name,v_sal;
    exit when my_cursor%notfound;
    dbms_output.put_line(v_name||'    '||v_sal);
  end loop;
  close my_cursor;
end;
declare 
type my_record is record (
  v_name emp.ename%type,
  v_sal emp.sal%type
  );
  cursor my_cursor is select ename,sal from emp where deptno=10; 
  my my_record;
begin 
  open my_cursor;
  loop
    fetch my_cursor into my.v_name,my.v_sal;
    exit when my_cursor%notfound;
    dbms_output.put_line(my.v_name||'    '||my.v_sal);
  end loop;
  close my_cursor;
end;

 参数游标:需要对某一字段进行多值查询

通过键盘录入,查询部门编号为10员工信息 

declare 
   cursor my_cursor(d_no emp.deptno%type) is select ename,sal from emp where deptno=d_no;
   v_name emp.ename%type;
   v_sal emp.sal%type;
begin 
  open my_cursor(&a);
  loop
    fetch my_cursor into v_name,v_sal;
    exit when my_cursor%notfound;
     dbms_output.put_line(v_name||'    '||v_sal);
  end loop;
  close my_cursor;
end;

 查询某部门的员工姓名和薪水

declare 
   cursor my_cursor(d_no emp.deptno%type) is select ename,sal from emp where deptno=d_no;
   v_name emp.ename%type;
   v_sal emp.sal%type;
begin 
  open my_cursor(20);
  loop
    fetch my_cursor into v_name,v_sal;
    exit when my_cursor%notfound;
     dbms_output.put_line(v_name||'    '||v_sal);
  end loop;
  close my_cursor;
end;

强型游标:

 声明一个强型游标的变量
        1. 有一个记录类型
        2. 声明游标返回上面定义的记录类型
        3. 声明一个强型游标变量 

显示员工表中的姓名和工资记录 

declare
--1. 有一个记录类型
type my_record is record(v_name emp.ename%type,v_sal emp.sal%type);
--2. 声明游标返回上面定义的记录类型
type my_coursor is ref cursor return my_record;
--3. 声明一个强型游标变量
my my_coursor;
my1 my%rowtype;
begin
open my for select ename,sal from emp;
loop
fetch my into my1;
exit when my%notfound;
dbms_output.put_line(my1.v_name||'    '||my1.v_sal);
end loop;
close my;
end;

 根据输入的字符确定显示哪一张表中的数据

declare
type my_coursor is ref cursor;
my my_coursor;
emprec emp%rowtype;
deptrec dept%rowtype;
v_input char(1):='&input';
begin
if upper(v_input)='E' then
open my for select * from emp;
loop
fetch my into emprec;
exit when my%notfound;
dbms_output.put_line(emprec.ename||'    '||emprec.sal);
end loop;
elsif 
  upper(v_input)='D' then
  open my for select * from dept;
loop
fetch my into deptrec;
exit when my%notfound;
dbms_output.put_line(deptrec.dname||'    '||deptrec.loc);
end loop;
else 
dbms_output.put_line(' 输入错误   ');
end if;
close my;
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值