`

Oracle存储过程和程序包

 
阅读更多

一、为什么要用存储过程?

如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程。通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能。

二、过程的优点?

1、预编译:存储过程预先编译好放在数据库内,减少编译语句所花的时间。

2、缓存:预编译的存储过程会进入缓存,所以对于经常执行的存储过程,除了第一次执行外,其它次数的执行速度会明显提高。

3、减少网络传输:特别是对于一些处理数据的存储过程,不必像直接使用SQL语句那样多次传送数据到客户端。

4 、可维护性高:更新存储过程通常要比更改、测试和部署应用程序需要的时间和精力要少。

5、代码的重用:一个可以重用的存储过程可以应用到应用程序的多个位置。

6、增强安全性:通过对用户授权对存储过程的访问权限,它们可以提供对特定数据的访问;提高数据安全性,来防止SQL注入。

三、缺点:

1、如果需要对存储过程的输入输出参数做更改的话,还要更改程序。

2、可移植性差:因为存储过程将应用程序的业务处理绑定到数据库中,以此使用存储过程来处理业务逻辑限制了应用程序的可移植性。

四、创建存储过程

--1、简单的存储过程
create or replace procedure procedure_test
(p_id in varchar,p_status out varchar)  --p_id为输入参数 ,p_status为输出参数
as
 t_name varchar2(20);
 t_count number:=0;
begin
 select votetitle,vatesum into t_name,t_count from votemaster where id=p_id; --注意:此处没有:来赋值
 if t_count <=0 then
     p_status:= t_name||':差';
 elsif t_count >0 and t_count <3 then
     p_status:= t_name||':良好';
 else
     p_status:= t_name||':优秀';
 end if;
end;
--执行
declare 
 out_param varchar2(50);
begin 
 procedure_test('1',out_param);
  dbms_output.put_line(out_param);
end;

--2、带游标的存储过程
create or replace procedure procedure_cursor_test
(p_id in varchar2,p_status out varchar2)
as
  vote votemaster%rowtype; --声明一个对象(votemaster)类型的对象
  cursor my_cur is select * from votemaster; --声明一个游标并填充数据
begin
  open my_cur; --打开游标
       loop
          fetch my_cur into vote ; --循环游标,并放入对象
          exit when my_cur%notfound; --如果没有数据,则直接exit
          if vote.id=p_id then
             p_status := vote.votetitle||':'||vote.vatesum;
             --如果想终止循环,可以直接exit;
          end if;
       end loop;
  close my_cur; --关闭游标
end;
--执行
declare 
 out_param varchar2(50);
begin 
  procedure_cursor_test('1',out_param);
  dbms_output.put_line(out_param);
end;

  五、程序包

1、程序包:包是一组相关过程、函数、变量、游标、常量等PL/SQL程序设计元素的组合。它具有面向对象程序设计语言的特点,是对这些PL/SQL程序设计元素的封装。包类似于C++或Java程序中的类,而变量相当于类中的成员变量,过程和函数相当于方法,把相关的模块归类成为包,可使开发人员利用面向对象的方法进行存储过程的开发,从而提高系统性能。与类相同,包中的程序元素也分为公用元素和私有元素两种,这两种元素的区别是他们允许访问的程序范围不同,即他们的作用域不同。公用元素不仅可以被包中的函数、过程调用,也可以被包外的PL/SQl块调用。而私有元素只能被该包内部的函数或过程调用。

2、使用程序包的优点:在PL/SQL设计中,使用包不仅可以使程序模块化,对外隐藏包内所使用的信息,而写程序包可以提高程序的运行效率。因为,当程序首次调用程序包内部的函数或过程时,Oracle将整个程序包调入内存,当再次调用程序包中的元素时,Oracle直接从内存中读取,而不需要进行磁盘的IO操作,从而使程序的执行效率提高。

3、一个程序包分为两部分组成:

(1)、包定义:包定义部分声明包内数据类型、变量、常量、游标、子程序和函数等元素,这些元素为包的共有元素。

(2)、包主体:包主题则定义了包定义部分的具体实现,在包主体中还可以声明和实现私有元素。

--包定义
create or replace package t_package
is
  --定义过程
  procedure append_proc(t varchar2,a out varchar2);
  --过程的重载
  procedure append_proc(t number,a out varchar2);
  --定义函数
  function append_fun(t varchar2) return varchar2;
  
end;
 
--包主题
create or replace package body t_package
is
  v_t varchar2(30);
  --私有成员函数
  function private_fun(t varchar2) return varchar2 is
  begin
     v_t := t||'hello';
     return v_t;
  end;
  --实现过程
  procedure append_proc(t varchar2,a out varchar2) is
  begin
   a := t||'hello'; 
  end;
  --过程的重载
  procedure append_proc(t number,a out varchar2) is 
  begin 
    a := t||'hello'; 
  end;
  --实现函数
  function append_fun(t varchar2) 
  return varchar2 is
  begin
     v_t := t||'hello';
     return v_t;
  end;
end;

 

 

 

 

分享到:
评论
1 楼 phoenixpaul 2015-12-25  

相关推荐

    Oracle存储过程及程序包

    Oracle 存储过程及程序包是 Oracle 数据库中的一种重要组件,它们允许开发者在数据库中存储和执行复杂的业务逻辑。通过将业务逻辑封装在存储过程和程序包中,开发者可以提高数据库的安全性、可维护性和可扩展性。 ...

    oracle存储过程学习经典入门

    Oracle 存储过程是 Oracle 数据库中的一种程序单元,能够完成复杂的业务逻辑和数据操作。Oracle 存储过程的基础知识包括了解 Oracle 存储过程的基本语法、数据类型、变量声明、控制语句、循环语句、异常处理等方面的...

    oracle存储过程函数和程序包.ppt

    Oracle 存储过程函数和程序包 Oracle 存储过程函数和程序包是 Oracle 数据库中的一种核心组件,用于实现复杂的业务逻辑和数据处理。以下是 Oracle 存储过程函数和程序包的知识点总结: 一、游标的概念和类型 游标...

    oracle存储过程函数程序包课件ppt

    Oracle存储过程、函数和程序包是数据库管理中的关键概念,它们是PL/SQL编程的核心组成部分。存储过程是一种预编译的、命名的PL/SQL代码块,可以存储在数据库中,便于多次调用,提高效率并实现代码的模块化。在创建...

    oracle存储过程unwrap解密工具.zip

    总的来说,Oracle存储过程unwrap解密工具是数据库管理员和开发者的重要工具,它能帮助他们访问和管理加密的存储过程,从而在保护信息安全的同时,确保了日常维护和故障排查的顺利进行。在使用这类工具时,务必谨慎...

    oracle存储过程解锁

    以下是对“oracle存储过程解锁”这一主题的深入解析。 ### 标题:“oracle存储过程解锁” #### 解析: 在Oracle数据库中,存储过程是一种预先编译并存储在数据库中的SQL代码块,用于执行复杂的业务逻辑或数据处理...

    Oracle存储过程调用bat批处理脚本程序

    首先,`Oracle存储过程`是一种预编译的SQL和PL/SQL代码集合,可以被多次调用以执行特定的任务。它们提高了性能,降低了网络流量,并简化了数据库管理。在存储过程中调用外部脚本可以扩展Oracle的功能,比如自动化...

    oracle存储过程-帮助文档

    Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL语句和PL/SQL块,形成可重复使用的代码单元。这篇博客“oracle存储过程-帮助文档”可能提供了关于如何创建、调用和管理Oracle存储过程...

    C# 传入自定义列表List 到Oracle存储过程

    本文将详细讲解如何在C#中使用自定义列表(List)作为参数调用Oracle存储过程,以及实现这一功能的关键技术和注意事项。 首先,我们需要了解Oracle数据库中的PL/SQL类型,例如VARCAR2、NUMBER等,它们对应于C#中的...

    oracle 存储过程批量提交

    存储过程是由一系列SQL语句和过程化SQL语句(如循环、条件判断等)组成的单元,它们被编译并保存在数据库中。当存储过程被调用时,整个过程将作为一个整体被执行,这可以极大地提高执行效率,并简化应用程序的设计。...

    pb中执行oracle存储过程脚本

    在描述中提到的“使用批处理进行oracle存储过程脚本的创建和更新的处理”,这可能意味着开发者使用批处理命令(如Windows的批处理文件`.bat`)来自动化执行创建或更新Oracle存储过程的任务。批处理文件可以包含一...

    Oracle存储过程开发的要点

    Oracle存储过程是数据库管理系统Oracle中的一种重要特性,用于封装一系列SQL和PL/SQL代码,以实现特定的功能。在Oracle中,存储过程可以提高应用程序的性能,因为它减少了与数据库的交互次数,并允许在数据库级别...

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    Oracle 存储过程是一种可以在 Oracle 数据库中存储和执行的程序单元。存储过程可以由多种语言编写,例如 PL/SQL、Java 等。存储过程可以封装复杂的业务逻辑,提高数据库的安全性和性能。 二、CallabledStatement ...

    ORACLE的存储过程的异步调用

    为了使用特定的程序包,需要授予用户系统权限,例如执行 DBMS_PIPE、DBMS_LOCK 和 DBMS_JOB 等权限。 知识点 9: 建立测试环境 为了测试异步调用存储过程的方法,需要建立测试环境,包括创建模拟大业务处理存储过程...

    oracle 事务 回滚 存储过程

    ### Oracle存储过程 存储过程是在数据库中预编译的一组SQL语句,用于执行复杂的业务逻辑或数据操作。它们可以接受输入参数,执行一系列数据库操作,并返回结果。在Oracle中,存储过程使用PL/SQL编写,可以在数据库...

    oracle子程序和程序包

    程序包是Oracle中更高层次的代码组织形式,它可以包含一组相关的子程序(存储过程和函数)以及公共变量和常量。程序包有助于模块化和封装,提高代码的可维护性和复用性。 1. **包规范(Specification)**:定义包中...

    Oracle存储过程返回结果集

    本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`...

    ORACLE存储过程学习源码

    Oracle存储过程是数据库编程的重要组成部分,它允许程序员在数据库中执行复杂的业务逻辑和数据操作。这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,...

    Oracle存储过程最基本的开发规范

    ### Oracle存储过程开发基本规范详解 #### 一、概述 Oracle存储过程作为一种强大的数据库编程工具,在企业级应用中被广泛采用。为了确保存储过程的质量、可读性和可维护性,制定一套合理的编码规范至关重要。本文将...

Global site tag (gtag.js) - Google Analytics