oracle 游标和函数1

本文介绍了PL/SQL中的游标概念及其应用方法,包括声明、打开、读取及关闭游标的操作步骤,并通过示例展示了如何使用ROWTYPE类型来处理表中的单行数据,还演示了使用FOR循环进行游标操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

游标是一种PL/SQL控制结构;可以对SQL语句的处理进行显示控制,便于对表的行数据逐条进行处理。游标并不是一个数据库对象,只是存留在内存中。

由于使用游标有许多种方法,这里只挑选较常用的进行介绍。对应的表都是oracle安装时自带的表。

 

操作步骤: • 声明游标 • 打开游标 • 取出结果,此时的结果取出的是一行数据 • 关闭游标


到底那种类型可以把一行的数据都装进来

• 此时使用ROWTYPE类型,此类型表示可以把一行的数据都装进来。

 

如:例如:查询雇员编号为7369的信息(肯定是一行信息)。

declare
  eno emp.empno%type;
  empinfo emp%rowtype;
  begin
    eno:=&en;
    select * into empinfo from emp where empno=eno;
    dbms_output.put_line('no:'||empinfo.empno);
    dbms_output.put_line('name:'||empinfo.ename);
  end;
/

 

--使用for循环操作游标(比较常用)
declare
  cursor mycur1 is select * from emp ;
  empinfo emp%rowtype;
  cou number;
  begin
    for empinfo in mycur1 loop
      cou:=mycur1%rowcount;  -- 序号
      dbms_output.put_line(cou);
      dbms_output.put_line('no:'||empinfo.empno);
      dbms_output.put_line('name:'||empinfo.ename); 
    end loop;
  end;
/

 

--再看例子

一次性上涨全部雇员的工资。根据它所在的部门涨工资,规则:

• 10部门上涨10%

• 20部门上涨20%

• 30部门上涨30%

所有部门的上涨工资,最不能超过5000,如果超过5000,则工资就为5000。

declare
  cursor mycur2 is select * from emp;
  empinfo emp%rowtype;
  s emp.sal%type;
  begin
    for empinfo in mycur2 loop
      if empinfo.deptno=10 then
        s:=empinfo.sal*1.1;
      elsif empinfo.deptno=20 then
        s:=empinfo.sal*1.2;
      elsif empinfo.deptno=30 then
        s:=empinfo.sal*1.3;
      end if;
      if s>5000 then
        s:=5000;
      end if;
      update emp set sal=s where empno=empinfo.empno;
    end loop;
  end;
/

 

--函数就是一个有返回值的过程。

--定义一个函数:此函数可以根据雇员的编号查询出雇员的年薪
create or replace function myfun1(eno emp.empno%type) return number
as
  rsal number;
  begin
    select (sal+nvl(comm,0))*12 into rsal from emp where empno=eno;
    return rsal;
  end;
/

 

直接写SQL语句,调用此函数:
select myfun1(7369) from dual;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值