Create Or Replace Procedure raise_sal3(p_empno emp.empno%Type,p_sal In Out emp.sal%Type) Is
Begin
Update emp Set sal = sal + p_sal Where empno = p_empno;
Select sal Into p_sal From emp Where empno = p_empno;
End;
2、写一个匿名块,调用上述存储过程。
Declare
v_sal emp.sal%Type;
Begin
v_sal :=200;
raise_sal3(7788,v_sal);
dbms_output.put_line(v_sal);
End;
Create Or Replace Procedure add_emp(p_emp emp%Rowtype) Is
v_maxnum Number;
v_currnum Number;
e_too_many Exception;
Begin
Select maxnum Into v_maxnum From dept Where deptno = p_emp.deptno;--查询部门编制
Select Count(empno) Into v_currnum From emp Where deptno = p_emp.deptno ;--查询部门当前人数
If v_currnum >=v_maxnum Then
Raise e_too_many;
Else
Insert Into emp Values(p_emp.empno,p_emp.ename,p_emp.job,p_emp.mgr,p_emp.hiredate,p_emp.sal,p_emp.comm,p_emp.deptno);
dbms_output.put_line('录入成功');
End If;
Exception
When e_too_many Then
dbms_output.put_line('该部门编制已满');
End;
4、写一个存储过程call_addemp,验证上述存储过程的正确性。
Create Or Replace Procedure call_addemp Is
v_emp emp%Rowtype;
Begin
Select * Into v_emp From emp Where empno= 7788;
v_emp.empno := 7789;
add_emp(v_emp);
End;
Create Or Replace Procedure show_nextlevel(p_empno emp.empno%Type) Is
Cursor emp_cursor Is Select Level,ename From emp Where empno <> p_empno Start With empno = p_empno Connect By Prior empno=mgr ;
Begin
For emp_record In emp_cursor Loop
If emp_record.Level =2 Then
dbms_output.put_line('员工'||emp_record.ename||'为直接下级');
Else
dbms_output.put_line('员工'||emp_record.ename||'为间接下级');
End If;
End Loop;
End;
--调用存储过程块
Begin
show_nextlevel(p_empno => 7839);
End;