zoukankan      html  css  js  c++  java
  • 5:函数,游标

    函数语法

    --创建函数,参数是部门名称,返回值 是该部门平均薪资
    create or replace function fun_avgsal
    (
      dno number
    )
    return number -- 返回值类型
    is
    begin
      
      declare
      v_avgsal emp.sal%type;
      begin
      select sal into v_avgsal 
      from emp where emp.empno = dno;
      return(v_avgsal);
      end;
    end;

    调用:

    --调用
    declare
      avgsal emp.sal%type;
      begin
        avgsal := fun_avgsal(30);
        dbms_output.put_line(avgsal);
    end;

    游标:一个存储上下文信息的对象,理解为‘集合’

    隐式游标:

    --使用隐式游标
    --更新7788的薪资
    begin 
      update emp set sal = sal +100 where empno = 7788;
      
      --使用隐式游标
      --怎么知道上方语句是否被执行,根据的是数据库更新条数
      --存储的是刚刚执行的sql语句
      if SQL%FOUND then
        dbms_output.put_line('更新成功');
        commit;
      else
        dbms_output.put_line('更新失败');
        rollback;
      end if;    
    end;

    显示游标:语法

    --显示游标的使用
    --声明游标,提取7788的人的名字和职务
    declare
      v_name emp.ename%type;
      v_job emp.job%type;
      cursor emp_cur --1:声明游标
      is
      select ename,job from emp where emp.empno = 7788;
    begin
      --在执行部分使用游标
      --2:打开游标
       open emp_cur;
       --3:提取游标的值
       fetch emp_cur into v_name,v_job;
       dbms_output.put_line(v_name || v_job);
       --4:关闭游标
       close emp_cur;
    end;

    存放多条数据

    --声明游标存放多条数据,遍历取出数据
    declare 
    cursor emp_cursor
    is
    select * from emp where emp.deptno = 20;
    begin
      --for循环不需要手动打开游标,自动打开
      for emps in emp_cursor loop
      dbms_output.put_line(emps.empno ||','||emps.ename);
      end loop;
    end;
    --另一种循环写
    declare
    emps emp%rowtype;
    cursor emp_cur
    is
    select * from emp where emp.deptno = 20;
    begin
      open emp_cur;
      loop
      fetch emp_cur into emps;
      exit when emp_cur%notfound;
      dbms_output.put_line(emps.empno ||','||emps.ename);
      end loop;
    end;

    带参游标

    --带参游标
    declare
    v_name emp.ename%type;
    v_sal emp.sal%type; 
    cursor emp_cur(eno number)
    is
    select ename,sal from emp
    where emp.empno = eno;
    begin
      open emp_cur(7788);
      fetch emp_cur into v_name,v_sal;
      dbms_output.put_line(v_name||','||v_sal);
      close emp_cur;
    end;
  • 相关阅读:
    单(single)
    cdq分治
    寿司
    qtth
    二分,倍增的一些思考(lost my music:可持久化栈)
    手写堆、哈希表
    保留字,关键字
    测试19,20,21
    要买的书
    测试18:T2:可爱精灵宝贝
  • 原文地址:https://www.cnblogs.com/miaomeng/p/8931525.html
Copyright © 2011-2022 走看看