在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,可是也有它们的不同之处,这段时间刚学完函数与存储过程,来给自己做一个总结:
一:存储过程:简单来说就是有名字的pl/sql块。
语法结构:
create or replace 存储过程名(参数列表)
is
--定义变量
begin
--pl/sql
end;
案例:
create or replace procedure add_(a int,b int)
is
c int;
begin
c:=a+b;
dbms_output.put_
在Oracle数据库中,存储函数和存储过程是两种重要的PL/SQL编程组件,它们在数据库管理和应用程序开发中扮演着重要角色。虽然两者有许多相似之处,但它们之间也存在显著的差异。
存储过程是一个预编译的PL/SQL代码块,它具有一个特定的名字,并可以接收参数。创建存储过程的基本语法如下:
```sql
CREATE OR REPLACE PROCEDURE 过程名 (参数列表)
IS
-- 定义局部变量
BEGIN
-- PL/SQL 代码
END;
```
例如,以下是一个简单的存储过程`add_`,它接受两个整数作为输入参数并返回它们的和:
```sql
CREATE OR REPLACE PROCEDURE add_(a IN INT, b IN INT)
IS
c INT;
BEGIN
c := a + b;
DBMS_OUTPUT.PUT_LINE(c);
END;
```
调用这个存储过程,我们可以使用`DECLARE`语句和`BEGIN-END`块:
```sql
DECLARE
BEGIN
add_(12, 34);
END;
```
存储过程有三种参数类型:
1. 输入参数(IN):只能传递数据,不能接收返回值。
2. 输出参数(OUT):不传递数据,但可以将结果传出。
3. 输入输出参数(IN OUT):既可传递数据,也能接收返回值。
另一方面,存储函数与存储过程类似,但其主要区别在于函数必须有返回值,并且返回值类型在声明时定义。函数的创建语法如下:
```sql
CREATE OR REPLACE FUNCTION 函数名 (参数列表) RETURN 返回类型
IS
BEGIN
-- PL/SQL 代码,包含RETURN语句
EXCEPTION
-- 异常处理
END;
```
例如,定义一个名为`f1`的函数,接受两个十进制数作为参数并返回它们的商:
```sql
CREATE OR REPLACE FUNCTION f1(n1 IN DEC, n2 IN DEC) RETURN DEC(19,2)
IS
r DEC(19,2);
BEGIN
r := n1 / n2;
RETURN r;
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('除数不能为0');
RETURN 0;
END;
```
这个函数可以在查询中直接作为表达式使用,如`SELECT f1(5, 2) FROM DUAL;`
存储过程与存储函数的相同点包括:
1. 创建语法结构基本相似,都支持参数的输入、输出或输入输出。
2. 两者都是一次编译,多次执行,提高了效率。
不同点主要包括:
1. 关键字区别:存储过程用`PROCEDURE`,而存储函数用`FUNCTION`。
2. 返回值机制:存储过程不通过`RETURN`返回值,而函数必须包含至少一个`RETURN`语句。
3. 执行方式:存储过程通常通过`EXECUTE`或`BEGIN-END`块执行,而函数可以直接作为表达式使用。
在实际应用中,如果需要返回单个值,选择存储函数较为合适。当涉及到更复杂的逻辑,可能需要返回多个值或者无需返回值,这时存储过程就更为适用。理解这些差异有助于更有效地设计和利用Oracle数据库的存储程序。