当前位置:文档之家› Oracle PLSQL从入门到精通 第14章

Oracle PLSQL从入门到精通 第14章


WHERE
empno = v_id;
RETURN (v_salary);
END get_sal;
/
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
7
执行函数( Functions)
作为 PL/SQL 表达式的一部分调用函数 创建一个变量来存储返回的值 执行函数,该变量将被赋予 RETURN语
15
存储过程和函数的优点
• 易于维护 • 提高了数据的安全性和一致性 • 改进了性能 • 提高了代码的清晰度
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
16
BEGIN v_phone := '(' || SUBSTR(p_phone_no,1,3) || ') ' || SUBSTR(p_phone_no,5,3) || '-' || SUBSTR(p_phone_no,9); RETURN v_phone;
END format_phone; / SELECT employee_id, first_name, last_name,
句返回的值
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
8
执行函数: 例子
调用环境 7902
GET_SAL 函数
p_id
RETURN v_salary
2
VARIABLE g_salary NUMBER
3
EXECUTE :g_salary := get_sal(7902)
• 当一个函数被删除时,所有授予该函数的权限被收回 • CREATE OR REPLACE 在语法上等价于将一个函数删
除掉并重建。在函数上授予的权限仍然维持原状
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
12
11g对SQL中调用函数的改进
在Oracle 11g之前从SQL中调用函数只能使用位置 表示法
BEGIN
EXCEPTION
END;
调用 环境
函数
IN parameter
(DECLARE) BEGIN EXCEPTION END;
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
14
过程与函数之间的比较
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
format_phone(phone_number) "Phone" FROM employees;
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
11
删除函数
删除存储函数
语法:
DROP FUNCTION function_name
例子:
DROP FUNCTION get_sal;
RETURN datatype IS|AS PL/SQL Block;
PL/SQL 程序块必须至少 包括一个返回语句
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
4
用SQL*Plus创建存储函数
1. 在正文编辑器中输入CREATE FUNCTION 语句的正文、并存入一个SQL脚本文件
函数的创建、维护和 删除
2019年11月29日星期五
———— 大智者不求因果,谁能做 描述函数的使用 创建存储函数 调用函数 删除函数 过程和函数之间的差别
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
2
存储函数概述
函数是一个命名并返回一个值的PL/SQL 程 序块
4
PRINT g_salary
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
9
在SQL 表达式中使用用户定 义的函数的优点
扩展了SQL的功能,特别是在操作非常复杂、 非常令人费解、或SQL无法完成时,非常有用
与在应用程序中过滤数据相比,使用函数在 WHERE子句中过滤数据可以提高效率
可以操控字符串
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
10
在SQL 表达式中调用函数
CREATE OR REPLACE FUNCTION format_phone (p_phone_no IN VARCHAR2) RETURN VARCHAR2
IS v_phone VARCHAR2(38);
Oracle 11g在SQL语句中调用函数时可以使用名字 表示法和混合表示法来说明参数
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
13
过程还是函数?
调用 环境
过程
IN parameter OUT parameter IN OUT parameter
(DECLARE)
6
创建存储函数: 例子
CREATE OR REPLACE FUNCTION get_sal
(v_id IN emp_pl.empno%TYPE)
RETURN NUMBER
IS
v_salary emp_pl.sal%TYPE :=0;
BEGIN
SELECT sal
INTO
v_salary
FROM
emp_pl
2. 运行该脚本文件以编译该函数、同时将源代 码和编译后的函数存储到数据库中
3. 使用SHOW ERRORS 命令查看编译错误 4. 当编译成功时,调用该函数
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
5
创建、编辑、和执行函数的步骤
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
函数可以作为模式对象存储在数据库中以方 便反复执行
函数可以作为表达式的一部分来调用
2019年11月29日星期五
———— 大智者不求因果,谁能做到? ————
3
创建函数的语法
CREATE [OR REPLACE] FUNCTION function_name [(parameter1 [mode1] datatype1, parameter2 [mode2] datatype2, . . .)]
相关主题