子程序
子程序包含存储过程、函数以及触发器
优点:模块化、可重用性、易维护、高效性(一次编译,多次使用,在内存中只加载一次)
一 存储过程
1.1 定义
表示存储在服务器中执行的过程
1.2 创建过程语法
create or replace PROCEDURE mypro
(
m_empno myemp.empno%TYPE,--默认为输入参数
m_sal OUT myemp.sal%TYPE,--输出参数
m_comm OUT myemp.sal%TYPE--输入输出参数
)
IS
mysal myemp.sal%TYPE;--局部变量(作用域在该过程中)
mycomm myemp.comm%TYPE;
BEGIN
SELECT sal,comm INTO mysal,mycomm FROM myemp WHERE empno = m_empno;
IF mysal > 3000 THEN
mysal := mysal + 100;
END IF;
m_sal := mysal;
m_comm := mycomm;
END;
/
1.3 调用过程
1.3.1 在sql中调用
execute过程名称(参数列表)
备注:如果过程没有参数,可以通过 过程名称()或者过程名称直接调用
call 过程名称(参数列表)
1.3.2 在sql/plus中调用
例子
DECLARE
m_empno myemp.empno%TYPE := 7369;
m_sal myemp.sal%TYPE;
m_comm myemp.sal%TYPE;
BEGIN
mypro(m_empno,m_sal,m_comm);
END;
/
二 函数
2.1 定义
专门完成复杂的业务运算过程,并返回运算结果(无法执行DML语句)
2.2 创建函数语法
create or replace function 函数名
(参数列表)--和过程的参数列表一样,可以有输入、输出、输入输出参数
return 返回类型
is
begin
运算过程:
return 值
end;
例子
CREATE OR REPLACE FUNCTION f_addtest(
add1 NUMBER,--不需要写参数长度
add2 NUMBER
)
RETURN NUMBER
IS
total NUMBER;
BEGIN
total := add1+ADD2;
dbms_output.put_line(total);
RETURN total;
END;
/
2.3 使用方法
不能像过程一样,直接在sql中单独使用,函数返回的值必须用变量接受,
2.3.1 在sql中使用
select 函数(参数) from dual;
select * from tableName where 函数(参数)>= ...将函数的返回值作条件查询
2.3.2 在pl/sql中使用
定义一个类型和函数返回值一样的变量接收函数返回值
total := 函数(参数)
DECLARE
total NUMBER(7,2);
add1 NUMBER(7,2) := 2;
add2 NUMBER(7,2) := 90;
BEGIN
total := f_addtest(1,2);
dbms_output.put_line(total);
END;
/
注意:
函数可以直接在sql中执行,而过程只能单独调用。
本文深入探讨了SQL中的子程序概念,包括存储过程、函数的定义、创建和调用方式,以及它们在数据库操作中的优势。通过实例展示了如何创建和使用存储过程与函数,以实现高效的数据管理和业务逻辑处理。

被折叠的 条评论
为什么被折叠?



