oracle与mysql创建自定义函数
2020-05-07 04:12
2006 查看
操作数据库时,如果有大量相同的操作(比如查询语句),写很多重复的语句会显得繁琐。我们可以把这些操作写成函数,在需要的地方调用,可以更高效。
注意:创建函数可以直接执行创建函数的脚本,复制底下创建函数的例子要把注释去掉,否则函数创建不成功。
文章目录
一、oracle自定义函数
格式:
CREATE OR REPLACE FUNCTION "数据库名称"."函数名" ( 参数一 [in,out] 类型,//参数有两种类型,in或者out;可以创建不带参数的函数 参数二 [in,out] 类型, ... ) return 返回值类型 is 变量一 类型;//多个变量之间用;隔开 变量二 类型; ... ; begin /*给变量赋值的过程*/ return (变量一或变量二或...); end;
举例:创建一个函数GETNAME(),根据输入的参数查询。
CREATE OR REPLACE FUNCTION GETNAME ( AB01ZA0100 IN VARCHAR2 ) RETURN VARCHAR2 IS pza0100 VARCHAR2 (50) ; ID VARCHAR2 (50) ; ab01name VARCHAR2 (50) ; BEGIN pza0100 := AB01ZA0100 ;//给变量赋值 SELECT //查询语句 NVL (ZA0101, '') INTO ab01name FROM AB01 WHERE za0100 = pza0100 ; RETURN (ab01name) ;//返回语句 END ;
调用:
SELECT GETNAME ('013100A')FROM dual
二、mysql自定义函数
格式:
//开启数据库自定义函数功能 set global log_bin_trust_function_creators = 1; DROP FUNCTION IF EXISTS "函数名"; //删除已存在的同名函数 DELIMITER $$ //定义分隔符,必须要有,可以不是$$ CREATE FUNCTION "数据库名称"."函数名" ( 参数一 类型,//多个参数用,分割 参数二 类型, ... ) RETURNS 返回值类型//不确定返回文本长度,可以使用text BEGIN /*给变量赋值的过程*/ return (变量一或变量二或...);//一定要有返回语句 END $$ //这个end后面有前面定义的分割符号 DELIMITER $$
之所以使用 DELIMITER 是因为 MySQL 中默认是使用分号来结束一个命令,我们定义的函数体中一条命令写完时会用分号来结束,而MySQL会误以为函数体已经定义完成,因此我们需要定义一个新的标识符来标识一个命令的结束。
SET str = concat(str,s);
举例:还是上面那个函数,在 mysql 创建。
set global log_bin_trust_function_creators = 1; DROP FUNCTION IF EXISTS GETNAME; DELIMITER $$ CREATE FUNCTION GETNAME ( AB01ZA0100 VARCHAR(20) ) RETURNS VARCHAR (50) BEGIN DECLARE pza0100 VARCHAR (50);//声明要用到的变量 DECLARE ab01name VARCHAR (50); SET pza0100 = concat(pza0100, AB01ZA0100) ; //赋值语句 SELECT //查询语句 IFNULL(ZA0101, '') INTO ab01name FROM AB01 WHERE za0100 = pza0100 ; RETURN (ab01name);//返回语句 END$$ DELIMITER $$
调用:
SELECT GETNAME ('013100A')
三、总结
- 创建时需要替换之前的函数
--oracle CREATE OR REPLACE FUNCTION "函数名"; --mysql DROP FUNCTION IF EXISTS "函数名"; CREATE FUNCTION ...
- 函数体内用到局部变量
--oracle,在return后定义变量 CREATE OR REPLACE FUNCTION ... return 返回值类型 is 变量一 类型;//多个变量之间用;隔开 变量二 类型; ... ; --mysql,在函数体内定义变量 BEGIN DECLARE var_name[,...] type [DEFAULT value] END
- 函数体内的赋值语句
--oracle 方法一: := 直接赋值 演示: a := 0; 方法二: SELECT INTO 语句 演示: select count(*) into a from students; 方法三: execute immediate 变量名a into 变量名b --变量名 a 一般是 select 语句 演示: a := 'select count(*) from tb where id =: 1'; execute immediate a into b; --mysql 方法一: SET var_name=expr [, var_name=expr]...; 演示: DECLARE var1, var2, var3 INT; SET var1=10, var2=20; SET var3=var1+var2; 方法二: SELECT INTO 语句 演示: DECLARE a VARCHAR(100); DECLARE b DECIMAL(8,4); SELECT aa,bb INTO a,b FROM ab01 WHERE id=1;catOneTwo 原创文章 51获赞 41访问量 2万+ 关注 私信
相关文章推荐
- Oracle 自定义函数中的sql语句的 单引号嵌套单引号的处理 + 仿 Mysql 中的 group_cat()
- mysql创建自定义函数
- Oracle技术之基于自定义函数的Function-Based索引创建
- mysql创建自定义函数
- ORACLE创建自定义函数返回varchar类型
- mysql函数的创建以及hibernate调用mysql自定义函数以及数据对比功能,模仿中关村在线
- 深入mysql创建自定义函数与存储过程的详解
- 22- mysql不能创建自定义函数
- mysql创建自定义函数
- oracle函数自定义过程 传参 执行过程 触发器 创建包 视图 动态执行sql语句
- MySQL基于实例sales创建自定义函数、视图、存储过程、触发器及查询结果创建新表
- 深入mysql创建自定义函数与存储过程的详解
- mysql创建自定义函数和存储过程
- mysql在centos上创建自定义函数报错。
- mysql里创建自定义函数---将某字段以逗号分割并取出第一个数据
- MySQL 创建自定义函数(1)
- mysql创建自定义函数与存储过程
- MySQL存储过程和自定义函数、Navicat for mysql、创建存储过程和函数、调用存储过程和函数的区别
- Mysql Query Browser下创建存储过程和自定义函数