由于项目中用到过一些存储过程,以前都是别人写。自己只管调用获得返回值。现在清闲,没事研究下。
Packages里面就是封装好的存储过程。由package和package body组成。每当创建一个包的时候,就分别创建了这2个。其中package是暴露给我们外面可以用的。package body里面除了有外面可以用的方法的实体。还可以写一些自己内部的工具类。
我自己写了一个最简单地的存储过程。代码如下:
这是写在package里面的。
create or replace package TASK_TEST is
function Add(i_name varchar2 , i_id varchar2)return varchar2;
end TASK_TEST;
这是写在package body里面的。
create or replace package body TASK_TEST is
function Add(i_name varchar2 , i_id varchar2)return varchar2 as pragma autonomous_transaction;
v_state varchar2(32767);
v_name varchar2(32767);
v_id varchar(32767);
begin
v_name:=i_name || '_temp';
v_id:=i_id || '_temp';
insert into temp_table(REND_NUM,TEMP_NAME,ID)
values(1,v_name,v_id)
returning v_id into v_state;
commit;
return v_state;
exception
when others
then return -1;
end;
end TASK_TEST;
创建的时没有什么太大的区别。但是需要注意的是。暴露给外面可以调用的必须和里面的实体一模一样。也就是说,对于这个存储过程来说,package body的add方法的as前面的必须和package一样,否则编译会抱错。入参是只读的。如果在里面需要做处理,必须另外写一个内部参数来处理。至于语法。。。。小弟学功甚浅,目前还没研究透。不过基本思路和sql差不多。有sql的基础,相信这个也不难。需要注意的是:每行结尾需要分号";",每个函数结尾都有"end;";,每个"if"对应一个"end if;".也就是一一对应的关系吧.其他好像没啥了.语法什么的,摆渡一下就什么都知道了.