13-oracle_数据库存储过程和包的开发



一:存储过程


(


图片左边的


procedure


目录


)




数据库的实际开发过程中,我们不可能每个脚本用人工的方式执行,需要自动的批量提交脚本到数据库执行,数据库就提供了像存储过程这样的对象,方便开发人员把处理某个功能或报表的逻辑写到存储过程里。

1)

存储过程的优点:

a.

执行速度更快:在数据库中保存的存储过程语句都是编译过的

b.

允许模块化程序设计和可移植性更强:类似方法的复用(使用存储过程可以实现存储过程设计和编码工作的分开进行,只要将存储过程名、参数、返回信息等告诉编程人员即可);

c.

提高系统安全性:防止

SQL

注入


(执行存储过程免费云主机域名的用户要具有一定的权限才能使用存储过程)

d.

减少网络流通量:只要传输存储过程的名称(在大批数据查询时使用存储过程分页查询比其他方式的分页要快很多)

e.

在同时进行逐主、从表间的数据维护及有效性验证时,使用存储过程更加方便,可以有效的利用

SQL

中的事务处理机制。


创建存储

2)

创建语法:


create


or


replace


procedure


p_house_create_data(p_fm_dt


date


default


sysdate





1


,


p_to_dt


date


default


sysdate


)


is




/************************************************************



author :hf



created :2018-08-08



purpose :




生成数据过程



parameter value



p_fm_dt 2018-08-01(




昨天




)



p_to_dt 2018-08-02(




当日




)



*************************************************************/




/************************************************************






定义区间



*************************************************************/


v_sqlstate


varchar2


(


500


);


v_proc_name


varchar2


(


64


) :=


‘p_house_create_data’


;


v_fm_dt


date


;


v_to_dt


date


;


begin




/************************************************************






赋值区间



*************************************************************/


v_sqlstate :=





赋值





;


v_fm_dt :=


trunc


(p_fm_dt,


‘DD’


);


v_to_dt :=


trunc


(p_to_dt,


‘DD’


);




/************************************************************






计算区间



*************************************************************/


v_sqlstate :=





开始





;


pkg_rpt_system.sys_log(v_proc_name, v_sqlstate,


‘OK’


,


null


,


null


);








写日志


v_sqlstate :=





删除数据





;



delete


t_landlord;



commit


;


v_sqlstate :=





生成房东信息数据





;



insert


into


t_landlord



values


(


‘001’


,





张强





,











,


‘13723870069’


,


‘001’


,


‘2010-03-12’


);



commit


;




/************************************************************






结束区间



*************************************************************/


v_sqlstate :=





结束





;


pkg_rpt_system.sys_log(v_proc_name, v_sqlstate,


‘OK’


,


null


,


null


);








写日志




/************************************************************






异常区间



*************************************************************/


exception



when


others


then



rollback


;








回滚数据


pkg_rpt_system.sys_log(v_proc_name,


v_sqlstate,



‘ERROR’


,



sqlcode


,



substr


(


sqlerrm


,


1


,


3000


));








写日志



commit


;


end


p_house_create_data;


二:包


(


图片左边的


package bodies


目录


)




其实包可以理解为是对存储过程和函数的方便管理,如果过程和函数多了,不方便查找,比较乱,哪么我们可以把相关的过程放在一起,或把业务逻辑相关的放在一起维护。

1)

包的构成:

a.

包头:是对包里的过程和函数的一个定义,相关于目录

b.

包体:是对包里的过程和函数的实现,具体代码的逻辑实现。

2)

创建语法:








包头


create


or


replace


package


pkg_abc_create_data


is



procedure


p_house_create_data(p_fm_dt


date


default


sysdate





1


,


p_to_dt


date


default


sysdate


);


end


pkg_abc_create_data;








包体


create


or


replace


package


body


pkg_abc_create_data


is



procedure


p_house_create_data(p_fm_dt


date


default


sysdate





1


,


p_to_dt


date


default


sysdate


)


is




/************************************************************



author :hf



created :2018-08-08



purpose :




生成数据过程



parameter value



p_fm_dt 2018-08-01(




昨天




)



p_to_dt 2018-08-02(




当日




)



*************************************************************/




/************************************************************






定义区间



*************************************************************/


v_sqlstate


varchar2


(


500


);


v_proc_name


varchar2


(


64


) :=


‘p_house_create_data’


;


v_fm_dt


date


;


v_to_dt


date


;



begin




/************************************************************






赋值区间



*************************************************************/


v_sqlstate :=





赋值





;


v_fm_dt :=


trunc


(p_fm_dt,


‘DD’


);


v_to_dt :=


trunc


(p_to_dt,


‘DD’


);




/************************************************************






计算区间



*************************************************************/


v_sqlstate :=





开始





;


pkg_rpt_system.sys_log(v_proc_name, v_sqlstate,


‘OK’


,


null


,


null


);


v_sqlstate :=





删除数据





;



delete


t_landlord;



commit


;


v_sqlstate :=





生成房东信息数据





;



insert


into


t_landlord



values


(


‘001’


,





张强





,











,


‘13723870069’


,


‘001’


,


‘2010-03-12’


);



commit


;




/************************************************************






结束区间



*************************************************************/


v_sqlstate :=





结束





;


pkg_rpt_system.sys_log(v_proc_name, v_sqlstate,


‘OK’


,


null


,


null


);




/************************************************************






异常区间



*************************************************************/



exception



when


others


then



rollback


;


pkg_rpt_system.sys_log(v_proc_name,


v_sqlstate,



‘ERROR’


,



sqlcode


,



substr


(


sqlerrm


,


1


,


3000


));



commit


;



end


p_house_create_data;


end


pkg_abc_create_data;

相关推荐: Oracle RAC实施方案详细说明-安装后的检查06

Oracle RAC 实施方案详细说明 – 安装后的检查 06 查看数据库版本 SQL> select * from v$version; 查看集群名称 [root@rac01 bin]# ./cemutlo –help [root@rac01 bin…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 12/31 17:10
下一篇 12/31 17:11