一、存储函数
1、什么是存储函数
在 Oracle 数据库中,存储函数(Stored Function)是一种用户自定义的数据库对象,它们类似于程序中的函数或方法,可以接受参数并返回一个值。存储函数通常用于执行特定的计算、数据转换或其他操作,并且可以在 SQL 查询、PL/SQL 块以及其他存储过程或函数中使用。存储函数在创建后存储在数据库中,并且可以在需要时被调用。它们可以访问数据库中的数据,并且可以执行各种计算、查询和其他操作。存储函数还可以使用 SQL 和 PL/SQL 语言的所有功能,包括条件语句、循环、异常处理等。
2、语法
CREATE [ OR REPLACE ] FUNCTION 函数名称
(参数名称 参数类型, 参数名称 参数类型, ... )
RETURN 结果变量数据类型
IS
变量声明部分;
BEGIN
逻辑部分;
RETURN 结果变量;
[EXCEPTION
异常处理部分]
END;
3、案例
-- todo 要求:
-- 创建函数 fn_num_ou()
-- 具有参数 num ==> 整数类型
-- 返回值 ret ==> 字符串类型
-- 功能: 如果参数num为偶数 返回值ret结果为 是
-- 如果参数num为偶数 返回值ret结果为 不是
create or replace function fn_num_ou(num number)
return varchar2
is
ret varchar2(30);
begin
if mod(num,2)=0 then
ret := '是';
return ret;
else
ret := '不是';
return ret;
end if;
end;
select fn_num_ou('123') from dual;
二、存储过程
1、什么是存储过程
存储过程是被命名的 PL/SQL 块,存储于数据库中,是数据库对象的一种。
应用程序可以调用存储过程,执行相应的逻辑。
存储过程与存储函数都可以封装一定的业务逻辑并返回结果,存在区别如下:
1、存储函数中有返回值,且必须返回;而存储过程没有返回值,可以通过传出参数返回多个值。
2、存储函数可以在select 语句中直接使用,而存储过程不能。过程多数是被应用程序所调用。
3、存储函数一般都是封装一个查询结果,而存储过程一般都封装一段事务代码。
2、语法
CREATE [ OR REPLACE ] PROCEDURE 存储过程名称
(参数名 类型, 参数名 类型, 参数名 类型)
IS|AS
变量声明部分;
BEGIN
逻辑部分
[EXCEPTION
异常处理部分]
END;
----------------------------------------------------
参数只指定类型,不指定长度
过程参数的三种模式:
IN 传入参数(默认)
OUT 传出参数,主要用于返回程序运行结果
IN OUT 传入传出参数
3、案例
3.1、存储过程(传入参数)
CREATE [OR REPLACE] PROCEDURE procedure_name
(parameter1 IN datatype1, parameter2 IN datatype2, ...)
IS
BEGIN
-- Procedure body
-- Perform actions using input parameters
END;
CREATE PROCEDURE
用于创建一个新的存储过程。procedure_name
是存储过程的名称。parameter1
,parameter2
, ... 是存储过程的传入参数,每个参数都有一个数据类型,并且带有IN
关键字指示它们是输入参数。- 在
IS
和BEGIN
之间的部分是存储过程的主体,其中包含了实际的逻辑和操作,可以使用传入参数进行计算和处理。
-- 创建删除指定id的pro_owners_del存储过程
-- 要求 t_owners表 传入参数
create or replace procedure pro_owners_del(v_id in number)
is
begin
-- 根据v_id删除数据
delete from T_OWNERS where id=v_id;
-- 提交数据
commit;
end;
--
call PRO_OWNERS_DEL(100);
3.2、存储过程(传出参数)
CREATE [OR REPLACE] PROCEDURE procedure_name
(parameter1 OUT datatype1, parameter2 OUT datatype2, ...)
IS
BEGIN
-- Procedure body
-- Assign values to output parameters
END;
- 与传入参数相比,传出参数在参数列表中带有
OUT
关键字,指示它们是输出参数。- 在存储过程的主体中,你需要为传出参数赋值,以便在存储过程执行完成后返回结果。
-- 创建删除指定id的pro_owners_del_2存储过程
-- 要求
-- 1. t_owners表 传入参数v_id in, 传出参数v_name out 字符窜类型
-- 2. 调用pro_owners_del_2时 获取 删除的数据名称name 并显示出来
create or replace procedure pro_owners_del_2(v_id number, v_name out varchar2)
is
begin
select name into v_name from T_OWNERS where id=v_id;
delete from T_OWNERS where id=v_id;
commit;
end;
declare
v_name varchar2(30);
begin
pro_owners_del_2(103,v_name);
DBMS_OUTPUT.PUT_LINE(v_name);
end;