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

时间:2022-10-18 14:52:39

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' );

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

例:

创建一个通过部门编号返回部门名称的存储函数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/