数据库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/
相关文章推荐
- 数据库Oracle与Mysql语法对比:组函数的嵌套使用
- 数据库Oracle与Mysql语法对比:存储过程
- 数据库Oracle与Mysql语法对比:集合运算
- Vertica的这些事<六>—— SQL Server、Oracle、MySQL和Vertica数据库常用函数对比
- 数据库Oracle与Mysql语法对比:触发器
- 数据库Oracle与Mysql语法对比:循环结构
- 数据库Oracle与Mysql语法对比:联结(Join)
- SQL Server、Oracle、MySQL和Vertica数据库常用函数对比
- 数据库Oracle与Mysql语法对比:选择结构
- 数据库Oracle与Mysql语法对比:变量赋值
- MySQL与Oracle的语法区别详细对比
- 数据库学习之--Oracle 架构与MySQL架构对比
- oracle、sqlserver、mysql常用函数对比[to_char、to_number、to_date]
- mysql、sqlserver、oracle三种数据库维护索引、外键、字段语法总结
- MySQL与Oracle的语法区别详细对比
- 数据库oracle与mysql在语法上的区别
- MySQL与Oracle 语法对比
- MySQL与Oracle的语法区别详细对比
- [转]MySQL与Oracle的语法区别详细对比
- 数据库oracle与mysql在语法上的区别