游标的问题

来源:3-2 PL/SQL光标之光标的语法和第一个实例

qq__5778

2017-03-28 20:03

1.写一个存储过程
  输入:员工编号
  输出: 如果这个存在,则输出部门编号,如果部门不存在,则输出0
  部门存在,则显示这个部门的所有的员工的信息

写回答 关注

1回答

  • 慕斯8690777
    2017-03-29 11:58:03

    /*
    1.写一个存储过程
      输入:员工编号
      输出: 如果这个存在,则输出部门编号,如果部门不存在,则输出0
      部门存在,则显示这个部门的所有的员工的信息
    SQL语句:
    select depno from emp where empno = ??;
    判断存在一条记录,或者不存在记录,有两种方式实现
    1. 通过系统例外NO_DATA_FOUND实现
    2. 通过游标属性%notfound实现
    --这里选择通过游标实现
    select * from emp;
    --集合-->游标-->循环-->退出条件:%notfound

    变量:初始值  如何得到
    v_depno number :=0;
    v_empno number := &empno;

    */

    set serveroutput on
    accept empno prompt 'Please input empno:';

    declare

    --定义游标
        cursor c_emp(t_empno number) is select depno from emp where empno = t_empno;
        v_depno emp.depno%type;
    --所有员工信息的游标
        cursor c_all_emp is select * from emp;
        v_all_emp emp%rowtype;
    --定义输入接收的变量
        v_empno number := &empno;
    begin
        --打开光标
        open c_emp(v_empno);
        --得到部门号
        fetch c_emp into v_depno;
        if c_emp%notfound then
            dbms_output.put_line('0部门存在.');
            --输出所有员工信息
            --打开所有员工游标
            open c_all_emp;
            loop
                --得到一个员工的信息
                fetch c_all_emp into v_all_emp;
                exit when c_all_emp%notfound;
                --打印一个员工的信息
                dbms_output.put_line(v_all.emp.empno||' '||v_all_empno.depno||'...');
                
            end loop;
            --关闭所有员工游标
            close c_all_emp;
        else
            dbms_output.put_line('depno is '||v_depno);
        end if;

    --关闭光标
        close c_emp;

    end;
    /

    qq__57...

    谢谢你啊

    2017-03-30 17:21:29

    共 1 条回复 >

Oracle数据库开发必备利器之PL/SQL基础

Oracle数据库高级开发必备的基础,通过实例带你熟练掌握

75048 学习 · 208 问题

查看课程

相似问题