oracle存储过程封装函数,ORACLE函数与存储过程

认识FUNCTION,PROCEDURE,PACKAGE

我们先来了解一下Oracle中FUNCTION,PROCEDURE,PACKAGE分别是什么,有什么作用。

1. FUNCTION

函数用于计算和返回一个结果值,把经常需要进行的计算写成函数,函数的调用是表达式的一部分。

只在创建时进行编译,以后每次执行函数都不需要重新编译。

函数必须有一个返回值,而过程没有做强制的规定。

RETURN在声明部分需要定义一个返回参数的类型,而在函数体中必须有一个RETURN语句。如果函数结束时还没有遇到返回语句,就会发生错误。

2. PROCEDURE

只在创建时进行编译,以后每次执行存储过程都不需再重新编译。

当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

3. PACKAGE

PACKAGE可以将存储过程分门别类,且可以在包内定义公共变量及类型,供包内存过使用

FUNCTION,PROCEDURE,PACKAGE的区别

标识符不同。函数的标识符为FUNCTION,过程为:PROCEDURE。

有无返回值不同。函数中有且必须有一个返回值,而存过中没有返回值。

类型说明不同。因为函数需要返回值所以需要给函数设置类型说明,但存过中没有。

调用方式不同。函数的调用可以出现在表达式中,但存过必须单独调用

而PACKAGE则与FUNCTIONS和PROCEDURES可以说完全没有关系,他只是函数与存过的一个集合容器

FUNCTION,PROCEDURE,PACKAGE的创建

FUNCTION的基本结构创建

Oracle函数包含三部分:函数声明,执行部分,返回的参数

简单的基本结构可以使用工具PL\SQL创建,File->New->Program Window->Function。输入函数名,以及参数,就能自动生成。

create or replace function dayTime(time in date) return varchar2 is

FunctionResult varchar2;

begin

//这里写业务逻辑

return(FunctionResult);

end dayTime;

以上示例中,用PL\SQL创建了一个名为DAYTIME的函数time是参数,in表示入参,date是参数类型,然后定义了类型为varchar2的返回参数FunctionResult。

SQL只能调用带有输入参数,不能带有输出,输入输出函数。

SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句。

PROCEDURE的基本结构创建

Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常(可写可不写,要增强脚本的容错性和调试的方便性那就写上异常处理)

简单的基本结构可以使用工具PL\SQL创建,File->New->Program Window->Procedure。输入过程名,以及参数,就能自动生成。

create or replace procedure demo(param in number,total out number) is

begin

//在这里写业务逻辑

exception

where others then

rollback;

end demo;

在以上的示例中,用PL\SQL创建了一个名为demo的存储过程,同时补充了exception部分(PL\SQL不会创建exception部分),当出现异常时,进行rollback处理。

其中的参数(无参存过就是去掉"()"的部分)

IN表示输入参数,参数默认为IN

OUT表示输出参数,在过程内部赋值,返回给调用它的过程

PACKAGE的基本结构创建

当我们用PL\SQL创建PACKAGE时,发现有PACKAGE还有一个Package body。分别是File->New->Program Window->Package和File->New->Program Window->Package body。创建之后,示例如下

//这里创建的是package

create or replace package test is

-- Author : KEVIN

-- Purpose : demo

-- Public type declarations

type is ;

-- Public constant declarations

constant := ;

-- Public variable declarations

;

-- Public function and procedure declarations

function () return ;

end test;

//这里创建的是package body

create or replace package body test is

-- Private type declarations

type is ;

-- Private constant declarations

constant := ;

-- Private variable declarations

;

-- Function and procedure implementations

function () return is

;

begin

;

return();

end;

begin

-- Initialization

;

end test;

那么它们有什么区别呢?

用面向对象的说法就是PACKAGE是一个抽象类,它不具体实现方法。而PACKAGE BODY是一个私有实现类,它里面的方法只有自己能调用。

标签:存储,函数,PACKAGE,--,创建,参数,SQL,ORACLE

来源: https://blog.csdn.net/qq3031195374/article/details/113374564

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值