`
357029540
  • 浏览: 726708 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Oracle中的子程序和包

阅读更多
在Oracle中通过使用子程序和包将PL/SQL代码封装起来,从而实现模块化,在以后的调用中可以多次复用,而不受前台语言的限制,同时通过用子程序和包将PL/SQL代码封装起来,有利于提高开发效率和执行效率,但是维护性却没有面向对象灵活,如果一个子程序受到影响,就需要修改该子程序的定义。

       在Oracle中子程序分为过程和函数,过程适用的场合是处理需要修改数据的业务,如有insert、delete、update、commit、rollback和有异常的地方;而函数适合于处理只是计算,而不必改变数据的场合,它通过返回值返回计算结果,它可以直接用在sql语句和jdbc中。过程的定义方法如下:

create or replace procedure add_emp(
p_ename emp.ename%type,
p_sal emp.sal%type,
p_hiredate varchar2, --不能写长度
p_empno out emp.empno%type
)
as
begin
  insert into emp(empno,ename,sal,hiredate)
values(seq1.nextval,p_ename,p_sal,to_date(p_hiredate,'yyyy-mm-dd'))
  returning empno into p_empno;
  commit;

end;

而调用方式与使用jdbc基本相同,不同点就是

String sql = "{ call del_emp(?) }";
  CallableStatement call =conn.prepareCall(sql);

方式调用函数。

函数创建方式:

create or replace function add_sal(
p_sal1 number,
p_sal2 number)
return number

as
  v_sal emp.sal%type;
begin
  v_sal:=p_sal1+p_sal2;
  return v_sal;
end;

     在Oracle中包适用于当过程和函数需要分类管理时使用,不同的包相当于不同的容器,先定义包规范,然后再包中实现包规范,包的定义方法如下:

--定义包规范
create or replace package mybao
is
  procedure hello(v1 varchar2);
  function double_num(v1 number)returnnumber;
end;

--然后在包体中实现
create or replace package body mybao
is
  procedure hello(v1 varchar2)
  as
  begin
    dbms_output.put_line('hello');
  end;

  function double_num(v1 number)returnnumber
  as
  begin
    returnv1*2;
  end;
end;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics