cjintao

存储过程及函数

存储过程

--存储过程 是先编译 后执行的一种代码集合对象
-- 基本存储过程
create or replace procedure hello_pro
as
begin
  dbms_output.put_line(\'HEllo,存储过程,准备开始!\');
end;
--执行存储过程
begin
  hello_pro;
end; 

--带参存储过程
--查询出20号部门的所有员工信息
create or replace procedure emp_dno_pro(vdeptno number) 
as
  cursor emp_cur is select  from emp where deptno = vdeptno; -- 创建游标
  vemp emp%rowtype;
begin
   open emp_cur; --打开游标
   loop --do while循环
     fetch emp_cur into vemp;
   exit when emp_cur%notfound; --退出条件
     dbms_output.put_line(\'员工编号:\'||vemp.empno||\'员工名:\'||vemo.ename);
   end loop;
   close emp_cur;
end emp_dno_pro;
--调用
begin
    emp_dno_pro;
end;

参数的三种传输类型

--查询出7499号员工工资
create or replace procedure emp_sal_pro(vempno number,vsal out number)
as
begin
   select sal into vsal from emp where empno = vempno;
end emp_sal_pro;

declare
  vsal emp.sal%type;
begin
  --vsal是一个传出参数,所以需要一个变量接收
  emp_sal_pro(7499,vsal);
  dbms_output.put_line(\'7499号员工工资为:\'||vsal);
end;


--查询出30号部门的所有员工信息
create or replace procedure emp_dno_pro(vdeptno number,cemp_cur out sys_refcursor)
as
begin
  open cemp_cur for select * from emp where deptno = vdeptno;
end;

declare
   vemp_cur sys_refcursor;
   vemp emp%rowtype;
begin
  emp_dno_pro(30,vemp_cur);
  loop
    fetch vemp_cur into vemp;
    exit when vemp_cur%notfound;
    dbms_output.put_line(\'员工编号:\'||vemp.empno||\'姓名为:\'||vemp.ename);
  end loop;
  close vemp_cur;
end;

存储函数

create or replace function hello_fun
return varchar2
as
   vstr varchar2(50);
begin
   return \'Hello 存储函数\';
end;

-- 调用
declare 
vstr varchar(100);
begin
  vstr:=hello_fun;
  dbms_output.put_line(vstr);
end;


-- 查询出7499号员工姓名工资
create or replace function emp_empno_fun(vempno number,vname out varchar2)
return number
as
  vsal emp.sal%type;
begin
  select ename,sal into vname,vsal from emp where empno = vempno;
  return vsal;
end;

--调用存储函数
declare
  vname emp.ename%type;
  vsal emp.sal%type;
begin
  vsal := emp_empno_fun(7499,vname);
  dbms_output.put_line(\'7499号员工姓名为:\'||vname||\'工资为:\'||vsal);
end;

--查询出30号部门的所有员工信息,及人数
create or replace function emp_dno_fun(vdeptno number,vemp_cur out sys_refcursor)
return number
as
  vcount number(5);
begin 
  open vemp_cur for select * from emp where deptno = vdeptno;
  select count(empno) into vcount from emp where deptno = vdeptno;
  return vcount;
end;

declare 
  vemp_cur sys_refcursor;
  vcount number(5);
  vemp emp%rowtype;
begin 
  vcount:=emp_dno_fun(30,vemp_cur);
  loop
    fetch vemp_cur into vemp;
    exit when vemp_cur%notfound;
    dbms_output.put_line(\'员工编号:\'||vemp.empno||\'姓名为:\'||vemp.ename);
  end loop;
  dbms_output.put_line(\'30号部门人数为:\'||vcount);
  close vemp_cur;
end;

分类:

技术点:

相关文章: