oracle存储过程和函数

存储过程:

语法:

create [or replace] procedure 存储过程名[(参数 in|out|in out 参数数据类型,...)]

is | as

   声名部分;

begin

   plsql代码块;

   exception

     异常处理;

end;

--无参数存储过程
create or replace procedure p1
is 
begin
   for v in (select * from emp) loop				 		dbms_output.put_line(v.ename||','||v.job||','||v.sal||','||v.deptno);
   end loop;
end;
select * from user_objects where object_type='PROCEDURE';

存储过程的调用:

  1. 在plsql块中调用

直接写名字

  1. call命令调用

call p();

  1. execute命令调用

控制台执行,不打印结果需要运行set serveroutput on;

删除存储过程:

drop procedure p1;

存储过程参数模式:

IN  用于接受调用程序的值。默认的参数模式

OUT  用于向调用程序返回值

IN OUT  用于接受调用程序的值,并向调用程序返回更新的值

--写一个存储过程,根据传入部门编号,查询该部门下的所有员工,并打印员工信息
create or replace procedure p1(v_deptno in number)
is 
begin
   for v in (select * from emp where deptno=v_deptno) loop
      dbms_output.put_line(v.ename||','||v.job||','||v.sal||','||v.deptno);
   end loop;
end;
--根据传入的员工编号,查询出员工信息并以输出参数的方式返回
create or replace procedure p2(v_empno in number,v_emp out emp%rowtype)
is
begin
  
  select * into v_emp from emp where empno=v_empno;
end;

declare
  v emp%rowtype;
begin
  p2(7369,v);
  dbms_output.put_line(v.empno||','||v.ename||','||v.job||','||v.deptno);
end;

函数:

语法:

create [or replace] function 函数名称[(形式参数 参数类型,...)]

return 返回值类型

is

   声名变量;

begin

  plsql代码块;

  return 返回值;

end;

create or replace function f1
return varchar2
is
begin
   return 'hello';
end;

访问函数的方式:

使用 SQL 语句

select f1 from dual;

使用 PL/SQL 块

declare

   v varchar2(30);

begin

   v:=f1;

  dbms_output.put_line(v);

end;
--求二个数的和
create or replace function f1(n number,n2 number)
return number
is
   
begin  
   return n + n2;
end;
--求一个数的阶乘
create or replace function f1(n number)
return number
is
   --声名一个变量保存返回值
   res number(10):=1;
begin
   for i in 1..n loop
      res:=res*i;
   end loop;
   return res;
end;

你可能感兴趣的:(oracle,oracle)