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

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值