您的位置:首页 > 数据库 > Oracle

数据库Oracle与Mysql语法对比:函数

2016-11-11 18:23 633 查看

Oracle

创建和删除存储函数

创建函数,需要有 CREATE PROCEDURE或CREATE ANY PROCEDURE 的系统权限。

该权限可由系统管理员授予。创建存储函数的语法和创建存储过程的类似,即

CREATE [OR REPLACE] FUNCTION 函数名[(参数[IN] 数据类型…)]

RETURN 数据类型

{AS|IS}

[说明部分]

BEGIN

可执行部分

RETURN (表达式)

[EXCEPTION

错误处理部分]

END [函数名];

其中,参数是可选的,但只能是 IN 类型(IN 关键字可以省略)。 在定义部分的 RETURN 数据类型,用来表示函数的数据类型,也就是返回值的类型,此部分不可省略。

例:

创建一个通过雇员编号返回雇员名称的函数 GET_EMP_NAME。

步骤 1:输入以下存储函数并编译:

CREATE OR REPLACE FUNCTION GET_EMP_NAME(P_EMPNO NUMBER
DEFAULT 7788)
RETURN VARCHAR2
AS
V_ENAME VARCHAR2(10);
BEGIN
SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO=P_EMPNO;
RETURN(V_ENAME);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有该编号雇员!');
RETURN (NULL);
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('有重复雇员编号!');
RETURN (NULL);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('发生其他错误!');
RETURN (NULL); END;


步骤 2:调用该存储函数,输入并执行以下程序:

BEGIN
DBMS_OUTPUT.PUT_LINE('雇员 7369 的名称是:'|| GET_EMP_NAME(7369));
DBMS_OUTPUT.PUT_LINE('雇员 7839 的名称是:'|| GET_EMP_NAME(7839));     END;


显示结果为:
雇员 7369 的名称是:SMITH
雇员 7839 的名称是:KING


说明:函数的调用直接出现在程序的 DBMS_OUTPUT.PUT_LINE 语句中,作为字符串表达式的一部分。如果输入了错误的雇员编号,就会在函数的错误处理部分输出错误信息。试修改雇员编号,重新运行调用部分。

Mysql

创建函数

语法:

CREATE  FUNCTION func_name (  [  func_parameter  ]  )
RETURNS   type
[   characteristic ...  ]  routine_body
说明:
func_parameter的形式有:  [   IN   |   OUT    |   INOUT  ]  参数名    参数类型 .
RETURNS   type 语句表示函数的返回数据的类型。


例:

创建存储函数,名称为TestFunc1. 返回id为 1 的产品名称。

CREATE  FUNCTION TestFunc1()
RETURNS VARCHAR(30)
RETURN ( SELECT  prodname FROM product WHERE id='1' );




例:

创建一个通过部门编号返回部门名称的存储函数GET_DEPT_NAME。并编写程序调用该函数进行测试,给出输出的结果。

delimiter $$
drop function if exists GET_DEPT_NAME$$
create function GET_DEPT_NAME(i int)
returns varchar(14)
return (select dname
from dept
where DEPTNO = i);
$$

select GET_DEPT_NAME(10);
select GET_DEPT_NAME(20);


参考:

http://zhouyou.jun.blog.163.com/blog/static/1009921892013823114327830/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: