`

Oracle的过程与函数

阅读更多

Oracle 的过程与函数

 

一、过程

       1 、过程创建和调用

       过程 (procedure) 是一个 PL/SQL 语句块,它存储在数据字典中并可被应用程序调用。可以使用过程存储数据库中频繁使用的应用逻辑。当执行一个过程时,其语句被作为一个整体执行。过程不将任何值返回调用程序。

       使用存储过程的一个好处就是能够实施数据的安全性。可以使不授权用户直接访问应用程序中的一些表,而授权用户执行访问这些表的一个过程。当执行过程时,他将以过程拥有者的权限来执行。除非通过过程,否则用户就不能访问这些表。

       创建过程语句的语法如下

       CREATE [OR REPLACE] PROCEDURE 过程名称

       [( 参数 [{IN | OUT | IN OUT}] 类型,

      

       参数 [{IN | OUT | IN OUT}] 类型 )]

       [AUTHID {CURRENT_USER | DESIGNER}]

       {IS | AS}

       过程体

 

       CREATE 关键字后加上 OR REPLACE 关键字是为了允许将撤销和重建这两步操作合并为一个操作。因为在创建一个过程时,有可能这个过程已存在。为了修改过程的代码,首先必须将该过程撤销,然后再重建。由于这种操作已经是开发过程的标准方式,所以关键字 OR REPLACE 允许将撤销和重建这两步操作合并为一个操作。

       和其他的 CREATE 语句一样,创建过程是一种 DDL 操作。

       在过程和函数中没有使用关键字 DECLARE ,取而代之的是关键字 IS AS 。这种语法风格是 PL/SQL Ada 语言中继承下来的。

 

综上所述,过程的结构应具有下面所示的特征

CREATE OR REPLACE PROCEDURE 过程名称 [ 参数列 ] AS

/* 声明部分在这里 */

BEGIN

/* 可执行部分在这里 */

EXCEPTION

/* 异常部分在这里 */

END [ 过程名称 ];

 

       过程名可以写在过程声明中最后一个 END 语句之后。如果在该 END 语句之后有标识符,该标识符一定要与该过程名匹配。

 

下面给出一个创建过程的简单例子,用于打印当前时间

CREATE OR REPLACE PROCEDURE print_current_time AS

CURTIME VARCHAR2(20);

BEGIN

SELECT TO_CHAR(sysdate, ‘yyyy/mm/dd hh24:mi:ss’)

              INTO CURTIME

       FROM dual;

DBMS_OUTPUT.put_line(‘ 当前时间 : ’||CHR(9)||CURTIME);

END print_current_time;

/

 

PL/SQL 中,调用过程有以下两种方式

* 直接利用 EXECUTE 命令

EXECUTE print_current_time;

* PL/SQL 块中调用
declare
begin
  print_current_time;
end;

 

 

       2 、过程参数设置与传递

       下面是一个带参数过程的简单例子。

       CREATE OR REPLACE PROCEDURE print_parameter

       (param1 IN VARCHAR2 DEFAULT NULL) AS

       BEGIN

       IF (param1 IS NULL) THEN

       DBMS_OUTPUT.put_line(‘ 你没输入参数 ’);

       ELSE

       DBMS_OUTPUT.put_line(‘ 你输入的参数是: ’||CHR(9)||param1);

       END IF;

       END print_parameter;

 

       形参可以有 3 种模式 IN OUT IN OUT 。如果没有为形参指定模式,其默认模式为 IN

       IN :该值具有只读属性,不能对其修改。当该过程结束时,控制将返回到调用环境,这时,对应的实参没有改变。

       OUT :该变量具有读写属性。当该过程结束时,控制将返回调用环境,形参的内容将被赋予对应的实参。

       IN OUT :该模式是模式 IN OUT 的组合。调用过程时,实参的值将被传递到该过程中。在过程内部,形参相当于初始化的变量,并具有读写属性。当该过程结束时,控制将返回调用环境中,形参的内容将被赋予实参。

 

       在过程的声明中,不能强制指定参数 CHAR VARCHAR2 的长度,以及指定 NUMBER 参数的精度或小数点后倍数。这样是非法的,因为这些限制可以从实参中获得。

 

       PL/SQL 的默认方式是对参数 IN 执行按引用传递,而对参数 OUT IN OUT 执行按值传递。另外,使用 NOCOPY 编译器将按引用传递参数,而不是按值传递。

 

 

二、函数的创建、查询和调用

       与过程一样,函数也带有参数,是存储在数据库中的代码块。其差别在于函数可以把值返回调用程序,可以在 SQL 语句中调用它们。一般的调用方式是:过程调用本身是一个 PL/SQL 语句,而函数调用是作为表达式的一部分执行的。

       语法如下:

       CREATE [OR REPLACE] FUNCTION 函数名称

       [( 参数 [{IN | OUT | IN OUT}] 数据类型,

      

       参数 [{IN | OUT | IN OUT}] 数据类型 )]

       [AUTHID {CURRENT_USER | DESIGNER}]

       {IS | AS}

       函数体

 

       返回语句: RETURN 返回值

       当执行该语句时,如果表达式的类型与定义不符,该表达式将被转换为函数定义子句 RETURN 中指定的类型。

 

       创建一个函数,确定一个数是奇数还是偶数。

       CREATE OR REPLACE FUNCTION EVEN_ODD

       (p_Number IN NUMBER)

       RETURN VARCHAR2 IS

       RETVAL VARCHAR2(5);

       BEGIN

       IF (p_Number MOD 2) = 0 THEN

       RETVAL:=’EVEN’;

       ELSE

       RETVAL:=’ODD’;

       END IF;

       RETURN RETVAL;

       END EVEN_ODD;

       /

 

       可以用 SELECT 语句进行查询:

       SELECT EVEN_ODD(29) FROM DUAL;

       对函数的调用一般在作为表达式的那部分进行,如:

       DBMS_OUTPUT.put_line(EVEN_ODD(a_number));

 

 

三、删除过程和函数

       DROP PROCEDURE 过程名称;

       DROP FUNCTION 函数名称;

 

 

4
0
分享到:
评论

相关推荐

    java调用oracle存储过程或者函数

    调用Oracle函数的过程与调用存储过程类似,但创建CallableStatement时的SQL语句略有不同。由于函数会返回一个值,所以格式通常是`{? = call function_name(?, ?, ...)}`。在执行后,通过`CallableStatement....

    oracle自定义日期函数

    Oracle 日期处理函数是数据库管理系统中非常重要的一部分,最近看到有人在做 T-SQL 与 PL/SQL 的转化,问了些有关时间函数的处理。在 PL/SQL 中,Oracle 提供了其他的方法来处理日期函数,例如 DATE_ADD 函数。在 T-...

    ORACLE CRC32函数

    在Oracle数据库中,`CRC32`函数是一种非常实用的功能,主要用于将字符类型的数据转换为一个唯一的数字类型,这一过程通常被称为散列(Hash)。通过该函数,可以方便地生成针对特定字符串的固定长度的数字签名,这...

    Oracle存储过程、函数和包

    - **命名存储**:与普通的PL/SQL块不同,存储过程和函数具有名称,并且这些名称在数据库中是唯一的。 - **安全性**:存储过程和函数的安全性由数据库管理,只有被授权的用户才能访问它们。 - **复用性**:存储过程和...

    Oracle过程与函数的区别分析

    Oracle过程和函数相信大家都比较了解,下面就为您详细介绍Oracle过程和函数二者之间的区别,希望可以让您对Oracle过程和函数有更深的认识。 Oracle过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也...

    Oracle MD5函数

    Oracle数据库系统中内置了MD5函数,这是一种广泛使用的哈希函数,用于生成固定长度的数字摘要,通常用于数据完整性校验和密码存储。MD5全称为Message-Digest Algorithm 5,由Ron Rivest在1991年设计,尽管它在安全性...

    Oracle存储过程和函数(最详细包含emp 表实例操作,边看边操作)

    函数与存储过程相似,但函数必须返回一个值,而存储过程可以不返回。函数可以被用作查询的一部分,提升SQL语句的灵活性。 1. **创建函数**:使用`CREATE FUNCTION`语句定义函数,例如: ```sql CREATE OR REPLACE...

    oracle存储过程函数生成DEMO

    在这个"Oracle存储过程函数生成DEMO"中,我们主要关注如何在Oracle数据库环境中设计、编写、测试以及调用存储过程和函数。下面将详细阐述相关知识点。 1. **存储过程**: - 存储过程是一组预先编译的SQL语句,存储...

    ORACLE存储过程,函数,包,游标

    函数与存储过程类似,也是预编译的代码块,但它们必须返回一个值。在Oracle中,你可以创建用户定义的函数,接收参数并返回计算结果。函数常用于计算、转换或提取数据,它们可以直接在SQL查询中使用,提供了一种灵活...

    oracle笔记存储函数和存储过程

    oracle笔记存储函数和存储过程,有具体的代码案例!存储函数和存储过程的知识笔记!

    Oracle中实现Split函数功能

    同时,这个函数也可以与其他 Oracle 函数和操作符结合使用,以实现更加复杂的数据处理任务。 在实际应用中,Oracle 中实现 Split 函数功能可以用于各种数据处理场景,例如数据清洁、数据转换和数据分析等。例如,在...

    oracle实验8-存储过程与函数的创建.doc

    Oracle实验报告

    oracle 函数大全 参考函数 手册 速查 chm格式

    通过深入学习和熟练掌握这些函数,可以提高在Oracle数据库中编写高效、精确的SQL查询和存储过程的能力。无论你是初学者还是经验丰富的开发者,这份Oracle函数大全都是一个宝贵的参考资料,能帮助你解决日常工作中...

    ORACLE过程和函数

    Oracle过程和函数是数据库管理中重要的编程元素,主要用于实现复杂的数据操作和逻辑处理。它们都是PL/SQL(Oracle的数据库编程语言)的一部分,允许开发者在数据库级别定义和执行功能。 **存储过程** 是一系列预...

    Java调用Oracle的过程和函数

    ### Java调用Oracle的过程和函数 在现代软件开发过程中,Java与Oracle数据库的结合非常常见。为了更好地管理和处理数据,通常需要在Java程序中调用Oracle数据库中的存储过程或函数。本文将详细介绍如何通过Java来...

    postgresql 兼容 oracle 函数

    "orafce-3.1.2"是这个项目的某个版本,它包含了多个与Oracle相似的函数和过程。例如: 1. **日期和时间函数**:Oracle中的ADD_MONTHS、LAST_DAY、NEXT_DAY等在orafce中都有对应的实现,帮助用户处理日期和时间数据...

    JAVA 与ORACLE 存储过程及函数

    标题中的“JAVA 与ORACLE 存储过程及函数”是指在Java编程语言中与Oracle数据库交互时,如何使用存储过程和函数的概念。在Oracle数据库中,存储过程是一组预编译的SQL语句和PL/SQL代码,而函数则是返回特定值的存储...

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

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

    oracle存储过程和函数写法

    oracle 的存储过程和函数的语法 如下

    oracle函数调用存储过程

    ### Oracle函数调用存储过程详解 #### 背景与目的 在开发Oracle应用程序时,经常需要使用到存储过程和函数。这两种类型的数据库对象各有优势,可以满足不同的业务需求。有时候,为了更好地组织代码和提高复用性,...

Global site tag (gtag.js) - Google Analytics