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;
  • 相关阅读:
    SAP MM 启用批次管理的物料MB21创建预留单据时批次号可以为空!
    强化学习十大原则
    新手必看:生成对抗网络的初学者入门指导
    华为云总裁郑叶来:易获取、用得起、方便用的算力是人工智能发展的关键
    贝叶斯、香农、奥卡姆合写博客「机器学习是什么」
    诗人般的机器学习,ML工作原理大揭秘
    为什么AI的翻译水平还远不能和人类相比?
    2018-8-10-wpf-DoEvents-
    2018-2-13-win10-uwp-iot
    2019-9-11-.NET-Standard
  • 原文地址:https://www.cnblogs.com/miaomeng/p/8931525.html
Copyright © 2011-2022 走看看