PLSQL 基础教程 五 常用数据库对象简介(函数存储过程包)

原创 2017年04月17日 17:49:03

本文简要介绍PLSQL中常用的一些数据库对象,主要包括函数、存储过程和包等等,将从相关的简介、语法、用途等等方面进行介绍。

 

简介

函数是Oracle中的一个可以单独存在的数据库对象,主要用于封装一些业务处理逻辑,同时在处理完成相关逻辑之后必须返回一个结果值。

 

创建语法

函数的创建语法如下:

 
--函数的创建语法
CREATEFUNCTION函数名(参数1IN参数1类型,参数2 IN参数2类型, .. .)
       RETURNIS函数的返回值类型;
BEGIN
--业务逻辑处理代码
RETURN函数的返回值(类型与定义的返回类型一致即可);
END函数名;

语法格式说明:

a. 创建函数的关键字为 FUNCTION

b. 函数名可以自定义,不能与系统已有的冲突

c. 函数的参数可以根据需要有多个,也可以没有参数

d. 函数一定有返回值,而且返回值的类型和函数的定义中的返回值类型必须保持一致

 

函数举例

此处已两个简单的函数为例进行说明,一个是带参数的函数,另一个是不带参数的函数:

a. 带参数的函数

--带两个参数的函数
--返回两个参数之和
createorreplacefunction cux_sum(num1number, num2 number)
returnnumberis
 
begin
  return num1 + num2;
end cux_sum;
 
--测试函数的调用
SELECT CUX_SUM(1,2)FROM DUAL



可以看到上述函数的功能是求两个整数参数之和。

带参数函数的调用直接通过 函数名(参数) 调用即可,不同的用户可以在函数名前加上所属用户即 所属用户.函数名(参数) 的形式进行调用。

 

b. 不带参数的函数

--不带参数的函数
CREATEORREPLACEFUNCTION CUX_SUM2
RETURNVARCHAR2IS
BEGIN
  RETURN'Y';
END CUX_SUM2;
 
--测试函数的调用
SELECT CUX_SUM2FROM DUAL;
 


可以看到上述函数的功能是返回一个字符串“Y”。

不带参数的函数的调用直接通过 函数名 调用即可,不同的用户可以在函数名前加上所属用户即所属用户.函数名  的形式进行调用。

  

简介

与函数类似,存储过程也是一种可以单独存储在Oracle数据库中的一种对象,也是用于封装一些业务处理逻辑,只是存储过程没有返回值,但是有输出参数。

 

创建语法

 

--存储过程语法
CREATEORREPLACEPROCEDURE存储过程名(参数1INOUT参数1类型,参数2 INOUT参数2类型, .. .) IS
BEGIN
 
    --业务逻辑处理代码  
 
END存储过程名;

语法格式说明:

e. 创建存储过程的关键字为 PROCEDURE

f. 存储过程名可以自定义,不能与系统已有的冲突

g. 存储过程的参数可以根据需要有多个,也可以没有参数,其中 IN 或者OUT是用于标识该参数是输入参数还是输出参数的

h. 存储过程没有返回值,但是可以有输出参数

 

存储过程举例

a. 带参数的存储过程

--存储过程举例
--求两个整数之和
CREATEORREPLACEPROCEDURE CUX_PRO(NUM1INNUMBER,
                                    NUM2INNUMBER,
                                    NUM3OUTNUMBER)IS
BEGIN
 
  --业务逻辑处理代码  
  NUM3 := NUM1 + NUM2;
END CUX_PRO;

由于存储过程没有返回值,因此不能像函数一样直接在SQL语句中使用,只能存在于代码块中(PLSQL代码块的知识后续讲解),此处为了演示方便直接在PLSQL窗口中进行测试调用:

直接通过SQL查询语句调用存储会报错。

 


可以看到该存储过程的逻辑是把输入的两个参数求和的值赋值给力输出参数。

存储过程必须存在于代码块中,带参数的存储的调用直接通过存储过程名(参数) 调用即可,不同的用户可以在函数名前加上所属用户即所属用户. 存储过程名(参数)  的形式进行调用。

不带参数的存储过程调用的时候去掉后边的括号和参数即可。 

相同点:

函数和存储过程都是数据库中的数据对象,可以单独存储;

函数和存储过程都是可以处理相关的业务逻辑;

函数和存储过程都是可以存在于PLSQL代码块中的

不同点:

函数有返回值,而存储过程没有;

存储过程有输出参数,而函数没有;

函数可以存在于SQL查询语句中,而存储过程不可以   

简介

包 PACKAGE,也是数据库中的一种对象,一般主要用来管理一组函数和存储过程的单元,我们可以把某一类型或者某一个功能模块的函数和存储过程统一定义在一个包中,便于维护和管理。

 

创建语法

包的创建分为两部分,包头和包体

包头的定义:

--包头定义语法
CREATEORREPLACEPACKAGE包名IS
 
 
  --主要用于申明变量、函数、存储过程等等
 
END包名;

包体的定义: 

CREATEORREPLACEPACKAGEBODY包名IS
 
  --相关的变量赋值、函数和存储过程的具体实现逻辑等等
 
BEGIN
  -- INITIALIZATION
  <STATEMENT>;
END包名;

包举例

我们将之前创建的函数和存储过程定义到一个新建的包中,以此来演示包的用法:

--包使用举例
--包头定义
CREATEORREPLACEPACKAGE CUX_TEST_PKGIS
 
  --定义函数
  FUNCTION CUX_SUM(NUM1NUMBER, NUM2 NUMBER) RETURNNUMBER;
 
  --定义存储过程
  PROCEDURE CUX_PRO(NUM1INNUMBER, NUM2INNUMBER, NUM3OUTNUMBER);
 
END CUX_TEST_PKG;
 
--包体定义
CREATEORREPLACEPACKAGEBODY CUX_TEST_PKGIS
 
  FUNCTION CUX_SUM(NUM1NUMBER, NUM2 NUMBER) RETURNNUMBERIS
  BEGIN
    RETURN NUM1 + NUM2;
  END CUX_SUM;
 
  PROCEDURE CUX_PRO(NUM1INNUMBER, NUM2INNUMBER, NUM3OUTNUMBER)IS
  BEGIN
 
    --业务逻辑处理代码  
    NUM3 := NUM1 + NUM2;
  END CUX_PRO;
 
END CUX_TEST_PKG;

使用了包之后,再次调用函数和存储过程的话,就按照 包名.函数名(参数)和 包名.存储过程名(参数) 进行调用即可

此处已函数为例进行演示:

SELECT CUX_TEST_PKG.CUX_SUM(1,4) FROM DUAL;


 

 

 

 

a. 本系列教程为个人原创,基于实际工作中的使用情况及个人理解,仅供学习交流之用,有不足之处还望批评指正,希望共同提高

b. 本节相关脚本

--带两个参数的函数
--返回两个参数之和
CREATE OR REPLACE FUNCTION CUX_SUM(NUM1 NUMBER, NUM2 NUMBER) 
RETURN NUMBER IS
BEGIN
  RETURN NUM1 + NUM2;
END CUX_SUM;


--测试函数的调用
SELECT CUX_SUM(1,2) FROM DUAL;

--不带参数的函数
CREATE OR REPLACE FUNCTION CUX_SUM2
RETURN VARCHAR2 IS
BEGIN
  RETURN 'Y';
END CUX_SUM2;


--测试函数的调用
SELECT CUX_SUM2 FROM DUAL;



--存储过程举例
--求两个整数之和
CREATE OR REPLACE PROCEDURE CUX_PRO(NUM1 IN NUMBER,
                                    NUM2 IN NUMBER,
                                    NUM3 OUT NUMBER) IS
BEGIN

  --业务逻辑处理代码   
  NUM3 := NUM1 + NUM2;
END CUX_PRO;


--存储过程不能直接在SQL查询中调用
--select CUX_PRO(1,2,3) from dual


--包使用举例
--包头定义
CREATE OR REPLACE PACKAGE CUX_TEST_PKG IS

  --定义函数
  FUNCTION CUX_SUM(NUM1 NUMBER, NUM2 NUMBER) RETURN NUMBER;
  
  --定义存储过程
  PROCEDURE CUX_PRO(NUM1 IN NUMBER, NUM2 IN NUMBER, NUM3 OUT NUMBER);
  
END CUX_TEST_PKG;

--包体定义
CREATE OR REPLACE PACKAGE BODY CUX_TEST_PKG IS

  FUNCTION CUX_SUM(NUM1 NUMBER, NUM2 NUMBER) RETURN NUMBER IS
  BEGIN
    RETURN NUM1 + NUM2;
  END CUX_SUM;

  PROCEDURE CUX_PRO(NUM1 IN NUMBER, NUM2 IN NUMBER, NUM3 OUT NUMBER) IS
  BEGIN
  
    --业务逻辑处理代码   
    NUM3 := NUM1 + NUM2;
  END CUX_PRO;

END CUX_TEST_PKG;

SELECT CUX_TEST_PKG.CUX_SUM(1,4) FROM DUAL;

版权声明:本文为博主原创文章,仅供学习交流之用,允许转载

PL/SQL 存储过程入门小例子

1.为什么要有存储过程? 过程是指用于执行特定操作的PL/SQL块。如果客户应用经常需要执行特定操作,那么可以考虑基于这些操作建立过程。(类似C函数,Java方法) 2.oracle的存储过程里的传递...
  • dazengq
  • dazengq
  • 2015年06月12日 13:50
  • 3614

plsql中存储过程的测试方法

存过调试
  • LeonWang_Fly
  • LeonWang_Fly
  • 2016年03月03日 16:42
  • 5499

plsql快速入门教程_包含存储过程(最适合初学者)

  • 2015年11月16日 19:39
  • 605KB
  • 下载

Oracle存储过程基本语法与基础教程(简明清楚且附实例)

存储过程   1  CREATE OR REPLACE PROCEDURE 存储过程名   2  IS   3  BEGIN   4  NULL;   5  END; ...
  • G15738290530
  • G15738290530
  • 2016年07月05日 12:16
  • 2655

PLSQL中关于包的一个示例

PLSQL有类似于JAVA中的接口的包,包的好处就是方便管理与理解,并且对于学习JAVA的人来说,基本没有语方法上的障碍,一看就知道是这么个东西,也好理解。下面是一个示例:需要的表:create ta...
  • fenglibing
  • fenglibing
  • 2007年07月27日 09:25
  • 6894

【PLSQL】package包的使用

包的组成包括: 过程,函数,变量,游标(定义一条sql语句),类型(定义符合类型),常量,异常 包的优点: ...
  • u011538954
  • u011538954
  • 2015年03月14日 11:46
  • 4779

图解Oracle存储过程教程

1 Oracle的工具有PLSQL和Oracle自带的SQL Developer,以下使用后者; 从开始菜单启动SQL Developer; 2 进入以前用scott账号建立的连接; ...
  • bcbobo21cn
  • bcbobo21cn
  • 2015年04月03日 00:04
  • 3982

PLSQL循序渐进全面学习教程(全)

康师傅 2008年01月24日(基于ORACLE9i+PL/SQLDeveloper7.1.4)课程 一 PL/SQL 基本查询与排序    本课重点:    1、写SELECT语句进行数据库查询  ...
  • spark998
  • spark998
  • 2008年01月25日 14:20
  • 45303

pl/sql 创建并执行oralce存储过程,并返回结果集

因为以前一直用sql server多,现在一下子用oracle ,d
  • kimizhou_blog
  • kimizhou_blog
  • 2014年09月17日 12:38
  • 22564

Oracle 创建存储过程以及PlSql 调用 存储过程

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。...
  • yali1990515
  • yali1990515
  • 2016年03月09日 16:55
  • 10607
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PLSQL 基础教程 五 常用数据库对象简介(函数存储过程包)
举报原因:
原因补充:

(最多只允许输入30个字)