oracle自定义函数总结
### Oracle 自定义函数详解 #### 一、概述 在Oracle数据库中,自定义函数是一种非常实用的功能,可以让我们根据特定需求编写SQL代码块,并将这些代码块封装为可重用的函数。通过这种方式,不仅可以提高代码的复用性,还可以增强SQL语句的功能性和灵活性。本文将详细介绍Oracle自定义函数的定义、使用方法以及一些高级特性。 #### 二、基本语法与定义 1. **定义函数的基本语法**: ```sql CREATE [OR REPLACE] FUNCTION function_name (参数列表) RETURN 返回类型 IS -- 变量声明 BEGIN -- 函数主体 -- 包含一系列PL/SQL语句 RETURN 返回值; END; ``` 2. **示例1:获取当前日期时间**: - **函数名称**:`cur_datetime` - **返回类型**:`VARCHAR2` - **功能描述**:此函数用于返回当前系统日期时间的字符串格式。 - **实现代码**: ```sql CREATE OR REPLACE FUNCTION cur_datetime RETURN VARCHAR2 IS BEGIN RETURN TO_CHAR(SYSDATE, 'YYYY"MM"DD"HH24"时"MI"分"SS"秒"'); END; ``` 3. **示例2:根据员工姓名获取薪资**: - **函数名称**:`get_sal` - **参数**:`name VARCHAR2` - **返回类型**:`NUMBER` - **功能描述**:此函数接受一个员工姓名作为参数,并返回该员工的薪资。 - **实现代码**: ```sql CREATE OR REPLACE FUNCTION get_sal(name VARCHAR2) RETURN NUMBER AS v_sal emp.sal%TYPE; BEGIN SELECT sal INTO v_sal FROM emp WHERE UPPER(ename) = UPPER(name); RETURN v_sal; END; ``` 4. **示例3:根据员工编号获取员工信息**: - **函数名称**:`get_info` - **参数**:`eno NUMBER`, `title OUT VARCHAR2` - **返回类型**:`VARCHAR2` - **功能描述**:此函数接受员工编号作为输入,并返回该员工的名字及其职位。 - **实现代码**: ```sql CREATE OR REPLACE FUNCTION get_info (eno NUMBER, title OUT VARCHAR2) RETURN VARCHAR2 AS name emp.ename%TYPE; BEGIN SELECT ename, job INTO name, title FROM emp WHERE empno = eno; RETURN name; END; ``` #### 三、函数的调用方式 1. **直接调用函数**: - **示例代码**: ```sql BEGIN dbms_output.put_line(cur_datetime); END; ``` 2. **通过变量接收函数返回值**: - **示例代码**: ```sql BEGIN dbms_output.put_line(':' || get_sal('&name')); END; ``` 3. **在SQL查询中使用函数**: - **示例代码**: ```sql SELECT get_sal('&name') FROM dual; ``` 4. **异常处理**: - **示例代码**: ```sql CREATE OR REPLACE FUNCTION get_sal(name VARCHAR2) RETURN NUMBER AS v_sal emp.sal%TYPE; BEGIN SELECT sal INTO v_sal FROM emp WHERE UPPER(ename) = UPPER(name); RETURN v_sal; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20000, '找不到指定员工'); END; ``` #### 四、高级特性 1. **结果缓存**: - **示例代码**: ```sql CREATE OR REPLACE FUNCTION get_name(no VARCHAR2) RETURN NUMBER RESULT_CACHE RELIES_ON(emp) AS v_name emp.ename%TYPE; BEGIN SELECT ename INTO v_name FROM emp WHERE empno = no; RETURN v_name; END; ``` - **功能描述**:此函数使用了结果缓存特性,当相同的输入参数被多次调用时,结果会被缓存起来,从而提高性能。 2. **使用输出参数**: - **示例代码**: ```sql DECLARE v_name emp.ename%TYPE; v_job emp.job%TYPE; BEGIN v_name := get_info(&eno, v_job); dbms_output.put_line(':' || v_name || ', 职位:' || v_job); END; ``` - **功能描述**:在这个例子中,我们使用了一个输出参数`v_job`来返回员工的职位信息。 3. **更新操作与返回**: - **示例代码**: ```sql DECLARE v_empno emp.empno%TYPE; v_name emp.ename%TYPE; v_salchg emp.sal%TYPE; BEGIN v_empno := &eno; v_salchg := &incre; v_name := get_upd_info(v_empno, v_salchg); dbms_output.put_line(':' || v_name || ', 新薪资:' || v_salchg); END; ``` - **功能描述**:这个示例展示了如何在一个函数中执行更新操作并返回多个值。 #### 五、总结 本文详细介绍了Oracle自定义函数的定义方法、常见用途及一些高级特性。通过这些自定义函数,我们可以更好地管理和优化数据库中的数据处理逻辑。掌握这些技术对于提高开发效率、减少重复工作量具有重要意义。希望本文能帮助您更好地理解和应用Oracle自定义函数。
CREATE OR REPLACE FUNCTION cur_datetime
RETURN VARCHAR2
IS
BEGIN
RETURN TO_CHAR(sysdate,
'YYYY"年"MM"月"DD"日"HH24"时"MI"分"SS"秒"');
EN
19-2:建立带有输入参数的函数
CREATE OR REPLACE FUNCTION get_sal(name VARCHAR2)
RETURN NUMBER
AS
v_sal emp.sal%TYPE;
BEGIN
SELECT sal INTO v_sal FROM emp WHERE upper(ename)=upper(name);
RETURN v_sal;
END;
19-3:建立带有输出参数的函数
CREATE OR REPLACE FUNCTION get_info
(eno NUMBER,title OUT VARCHAR2) RETURN VARCHAR2
AS
name emp.ename%TYPE;
BEGIN
SELECT ename,job INTO name,title FROM emp
WHERE empno=eno;
RETURN name;
END;
19-4:建立带有输入输出参数的函数
CREATE OR REPLACE FUNCTION get_upd_info
(eno NUMBER,sal_chg IN OUT NUMBER) RETURN VARCHAR2
- JAVA助手2014-08-22oracle自定义函数总结
- 粉丝: 1
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助