oracle 存储过程 包 【转】
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了oracle 存储过程 包 【转】,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3084字,纯文字阅读大概需要5分钟。
内容图文
一、为什么要用存储过程?
如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程。通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能。
二、过程的优点?
1、预编译:存储过程预先编译好放在数据库内,减少编译语句所花的时间。
2、缓存:预编译的存储过程会进入缓存,所以对于经常执行的存储过程,除了第一次执行外,其它次数的执行速度会明显提高。
3、减少网络传输:特别是对于一些处理数据的存储过程,不必像直接使用SQL语句那样多次传送数据到客户端。
4 、可维护性高:更新存储过程通常要比更改、测试和部署应用程序需要的时间和精力要少。
5、代码的重用:一个可以重用的存储过程可以应用到应用程序的多个位置。
6、增强安全性:通过对用户授权对存储过程的访问权限,它们可以提供对特定数据的访问;提高数据安全性,来防止SQL注入。
三、缺点:
1、如果需要对存储过程的输入输出参数做更改的话,还要更改程序。
2、可移植性差:因为存储过程将应用程序的业务处理绑定到数据库中,以此使用存储过程来处理业务逻辑限制了应用程序的可移植性。
四、创建存储过程
1 -- 1、简单的存储过程 2 create or replace procedure procedure_test 3 (p_id invarchar,p_status out varchar) --p_id为输入参数 ,p_status为输出参数 4as 5 t_name varchar2(20); 6 t_count number:=0; 7begin 8select votetitle,vatesum into t_name,t_count from votemaster where id=p_id; --注意:此处没有:来赋值 9if t_count <=0then10 p_status:= t_name||‘:差‘; 11 elsif t_count >0and t_count <3then12 p_status:= t_name||‘:良好‘; 13else14 p_status:= t_name||‘:优秀‘; 15endif; 16end; 17--执行18declare19 out_param varchar2(50); 20begin21 procedure_test(‘1‘,out_param); 22 dbms_output.put_line(out_param); 23end; 2425--2、带游标的存储过程26createorreplaceprocedure procedure_cursor_test 27 (p_id invarchar2,p_status out varchar2) 28as29 vote votemaster%rowtype; --声明一个对象(votemaster)类型的对象30cursor my_cur isselect*from votemaster; --声明一个游标并填充数据31begin32open my_cur; --打开游标33 loop 34fetch my_cur into vote ; --循环游标,并放入对象35exitwhen my_cur%notfound; --如果没有数据,则直接exit36if vote.id=p_id then37 p_status := vote.votetitle||‘:‘||vote.vatesum; 38--如果想终止循环,可以直接exit;39endif; 40end loop; 41close my_cur; --关闭游标42end; 43--执行44declare45 out_param varchar2(50); 46begin47 procedure_cursor_test(‘1‘,out_param); 48 dbms_output.put_line(out_param); 49end;
五、程序包
1、程序包:包是一组相关过程、函数、变量、游标、常量等PL/SQL程序设计元素的组合。它具有面向对象程序设计语言的特点,是对这些PL/SQL程序设计元素的封装。包类似于C++或Java程序中的类,而变量相当于类中的成员变量,过程和函数相当于方法,把相关的模块归类成为包,可使开发人员利用面向对象的方法进行存储过程的开发,从而提高系统性能。与类相同,包中的程序元素也分为公用元素和私有元素两种,这两种元素的区别是他们允许访问的程序范围不同,即他们的作用域不同。公用元素不仅可以被包中的函数、过程调用,也可以被包外的PL/SQl块调用。而私有元素只能被该包内部的函数或过程调用。
2、使用程序包的优点:在PL/SQL设计中,使用包不仅可以使程序模块化,对外隐藏包内所使用的信息,而写程序包可以提高程序的运行效率。因为,当程序首次调用程序包内部的函数或过程时,Oracle将整个程序包调入内存,当再次调用程序包中的元素时,Oracle直接从内存中读取,而不需要进行磁盘的IO操作,从而使程序的执行效率提高。
3、一个程序包分为两部分组成:
(1)、包定义:包定义部分声明包内数据类型、变量、常量、游标、子程序和函数等元素,这些元素为包的共有元素。
(2)、包主体:包主题则定义了包定义部分的具体实现,在包主体中还可以声明和实现私有元素。
1 -- 包定义 2 create or replace package t_package 3 is 4 -- 定义过程 5 procedure append_proc(t varchar2,a out varchar2); 6--过程的重载 7procedure append_proc(t number,a out varchar2); 8--定义函数 9function append_fun(t varchar2) returnvarchar2; 1011end;
1 -- 包主题 2 create or replace package body t_package 3 is 4 v_t varchar2(30); 5--私有成员函数 6function private_fun(t varchar2) returnvarchar2is 7begin 8 v_t := t||‘hello‘; 9return v_t; 10end; 11--实现过程12procedure append_proc(t varchar2,a out varchar2) is13begin14 a := t||‘hello‘; 15end; 16--过程的重载17procedure append_proc(t number,a out varchar2) is18begin19 a := t||‘hello‘; 20end; 21--实现函数22function append_fun(t varchar2) 23returnvarchar2is24begin25 v_t := t||‘hello‘; 26return v_t; 27end; 28end;
http://zxf-noimp.iteye.com/blog/1145442
原文:http://www.cnblogs.com/mingjing/p/6145565.html
内容总结
以上是互联网集市为您收集整理的oracle 存储过程 包 【转】全部内容,希望文章能够帮你解决oracle 存储过程 包 【转】所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。