游标的问题
1.写一个存储过程
输入:员工编号
输出: 如果这个存在,则输出部门编号,如果部门不存在,则输出0
部门存在,则显示这个部门的所有的员工的信息
1.写一个存储过程
输入:员工编号
输出: 如果这个存在,则输出部门编号,如果部门不存在,则输出0
部门存在,则显示这个部门的所有的员工的信息
2017-03-28
/*
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;
/
举报