第6章 函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle-PL/SQL
----函数
章节目标
•了解函数的用途
•掌握如何创建函数
•掌握如何调用函数
•掌握如何删除函数
•了解函数使用的限制
•了解过程和函数之间的区别
本章内容
知识点掌握程度难易程度
函数介绍函数的介绍掌握
数的掌函数的语法掌握
创建函数掌握
函数处理
执行函数掌握
从SQL中调用函数的限制掌握难点过程与函数的比较过程与函数的比较了解
删除函数删除函数了解
函数的介绍
•是命名的PL/SQL 块
•能够返回值
•存储在数据库中
•能够作为表达式的一部分被调用
函数的语法
CREATE [OR REPLACE] FUNCTION function_name [(parameter1 [mode1] datatype1,
[(parameter1[mode1]datatype1
parameter2 [mode2] datatype2,
. . .)]
RETURN datatype
RETURN d
IS|AS
PL/SQL Block;
• PL/SQL 块必须至少有一个RETURN语句
问题交流1
• 1.简述本章讲的函数和SQL中讲的单行函数及分组函数区别?
2简述本章讲解函数的特点?
• 2.简述本章讲解函数的特点?
3简述函数和过程的相同点和不同点?
• 3.简述函数和过程的相同点和不同点?
4简述函数创建的语法?编写函数需要注意的地• 4.简述函数创建的语法?编写函数需要注意的地方?
SQL*Pl
用SQL*Plus 创建函数
1.在一个编辑器中输入CREATE FUNCTION语句的文本并且将它1在个编辑器中输入C A C O语句的文本并且将它保存为一个SQL 脚本文件
2.运行存储源代码的脚本文件并且编译函数
3.用SHOW ERRORS查看编译错误
44.编译成功后就可以调用该函数
创建函数示例
CREATE OR REPLACE FUNCTION get_sal
(p_id IN emp.empno%TYPE)
RETURN NUMBER
IS
v_sal emp.sal%TYPE:=0;
BEGIN
SELECT sal INTO v_sal
FROM emp
WHERE empno= p_id;
WHERE empno=p id;
RETURN v_sal;
END get_sal;
/
函数调用
函数调用(续)
DECLARE
v_empno emp.empno%type:= 7369;
v_sal emp.sal%type:= 0; BEGIN
v_sal:= get_sal(v_empno);
dbms_output.put_line('薪水是'||v_sal);
db t t t li('薪水是'||l) END;
函数可以作为表达式的一部分被调用。
函数调用(续)
CREATE OR REPLACE FUNCTION tax
CREATE OR REPLACE FUNCTION
(p_sal in emp.empno%type)
RETURN number
IS
BEGIN
t(l*008)
return (p_sal* 0.08);
END tax;
函数也可以在SELECT子句中被调用:
SELECT ename,sal,tax(sal)
FROM emp;
问题交流2
• 1.简述编写函数时需要注意的几个问题?2简述函数调用的几种方式?
• 2.简述函数调用的几种方式?
练习1
• 1.编写一个函数,计算员工应交个人所得税,1000元以下的员工,不交税,1000-2000元的按1000元以下的员工不交税10002000元的按
照5%缴纳,2000以上的10%缴纳。
2写个块调用上述函数
• 2.写一个块,调用上述函数。
• 3.写一个SELECT语句,调用上述函数。
调用用户定义函数的位置
•SELECT语句的Select 列表中
•WHERE和HAVING子句的条件中
•START WITH、ORDER BY和GROUP BY子句中•INSERT语句的VALUES子句中
•UPDATE语句的SET子句中
从SQL中调用函数的限制
CREATE OR REPLACE FUNCTION dml_call_sql(p_sal NUMBER) RETURN NUMBER
IS
BEGIN
INSERT INTO emp(empno, ename,hiredate, job, sal)
VALUES(1, 'neu',SYSDATE,'manager', 1000);
(p_);
RETURN (p sal+ 100);
END;
UPDATE emp
SET sal= dml_call_sql(2000)
SET l d l ll l(2000)
WHERE empno= 7369;