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;
  • 相关阅读:
    java 备忘
    C++ 命名规范 (转)
    代码格式规范
    using namespace 由来
    结构体数组 初始化(转)
    Java Servlet系列之Servlet生命周期
    进程,内存,管理 ps,pstree,top,free,vmstat,iftop,lsof,查看网速
    网络基础知识-
    进程作业管理2-kill,前后台作业,并行执行
    计划任务cron,date,时间同步ntp,chrony
  • 原文地址:https://www.cnblogs.com/miaomeng/p/8931525.html
Copyright © 2011-2022 走看看