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
函数名称;
分享到:
相关推荐
调用Oracle函数的过程与调用存储过程类似,但创建CallableStatement时的SQL语句略有不同。由于函数会返回一个值,所以格式通常是`{? = call function_name(?, ?, ...)}`。在执行后,通过`CallableStatement....
Oracle 日期处理函数是数据库管理系统中非常重要的一部分,最近看到有人在做 T-SQL 与 PL/SQL 的转化,问了些有关时间函数的处理。在 PL/SQL 中,Oracle 提供了其他的方法来处理日期函数,例如 DATE_ADD 函数。在 T-...
在Oracle数据库中,`CRC32`函数是一种非常实用的功能,主要用于将字符类型的数据转换为一个唯一的数字类型,这一过程通常被称为散列(Hash)。通过该函数,可以方便地生成针对特定字符串的固定长度的数字签名,这...
- **命名存储**:与普通的PL/SQL块不同,存储过程和函数具有名称,并且这些名称在数据库中是唯一的。 - **安全性**:存储过程和函数的安全性由数据库管理,只有被授权的用户才能访问它们。 - **复用性**:存储过程和...
Oracle过程和函数相信大家都比较了解,下面就为您详细介绍Oracle过程和函数二者之间的区别,希望可以让您对Oracle过程和函数有更深的认识。 Oracle过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也...
Oracle数据库系统中内置了MD5函数,这是一种广泛使用的哈希函数,用于生成固定长度的数字摘要,通常用于数据完整性校验和密码存储。MD5全称为Message-Digest Algorithm 5,由Ron Rivest在1991年设计,尽管它在安全性...
函数与存储过程相似,但函数必须返回一个值,而存储过程可以不返回。函数可以被用作查询的一部分,提升SQL语句的灵活性。 1. **创建函数**:使用`CREATE FUNCTION`语句定义函数,例如: ```sql CREATE OR REPLACE...
在这个"Oracle存储过程函数生成DEMO"中,我们主要关注如何在Oracle数据库环境中设计、编写、测试以及调用存储过程和函数。下面将详细阐述相关知识点。 1. **存储过程**: - 存储过程是一组预先编译的SQL语句,存储...
函数与存储过程类似,也是预编译的代码块,但它们必须返回一个值。在Oracle中,你可以创建用户定义的函数,接收参数并返回计算结果。函数常用于计算、转换或提取数据,它们可以直接在SQL查询中使用,提供了一种灵活...
oracle笔记存储函数和存储过程,有具体的代码案例!存储函数和存储过程的知识笔记!
同时,这个函数也可以与其他 Oracle 函数和操作符结合使用,以实现更加复杂的数据处理任务。 在实际应用中,Oracle 中实现 Split 函数功能可以用于各种数据处理场景,例如数据清洁、数据转换和数据分析等。例如,在...
Oracle实验报告
通过深入学习和熟练掌握这些函数,可以提高在Oracle数据库中编写高效、精确的SQL查询和存储过程的能力。无论你是初学者还是经验丰富的开发者,这份Oracle函数大全都是一个宝贵的参考资料,能帮助你解决日常工作中...
Oracle过程和函数是数据库管理中重要的编程元素,主要用于实现复杂的数据操作和逻辑处理。它们都是PL/SQL(Oracle的数据库编程语言)的一部分,允许开发者在数据库级别定义和执行功能。 **存储过程** 是一系列预...
### Java调用Oracle的过程和函数 在现代软件开发过程中,Java与Oracle数据库的结合非常常见。为了更好地管理和处理数据,通常需要在Java程序中调用Oracle数据库中的存储过程或函数。本文将详细介绍如何通过Java来...
"orafce-3.1.2"是这个项目的某个版本,它包含了多个与Oracle相似的函数和过程。例如: 1. **日期和时间函数**:Oracle中的ADD_MONTHS、LAST_DAY、NEXT_DAY等在orafce中都有对应的实现,帮助用户处理日期和时间数据...
标题中的“JAVA 与ORACLE 存储过程及函数”是指在Java编程语言中与Oracle数据库交互时,如何使用存储过程和函数的概念。在Oracle数据库中,存储过程是一组预编译的SQL语句和PL/SQL代码,而函数则是返回特定值的存储...
Oracle 存储过程函数和程序包 Oracle 存储过程函数和程序包是 Oracle 数据库中的一种核心组件,用于实现复杂的业务逻辑和数据处理。以下是 Oracle 存储过程函数和程序包的知识点总结: 一、游标的概念和类型 游标...
oracle 的存储过程和函数的语法 如下
### Oracle函数调用存储过程详解 #### 背景与目的 在开发Oracle应用程序时,经常需要使用到存储过程和函数。这两种类型的数据库对象各有优势,可以满足不同的业务需求。有时候,为了更好地组织代码和提高复用性,...