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

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

三、总结

  1. 创建时需要替换之前的函数
--oracle
CREATE OR REPLACE FUNCTION "函数名";

--mysql
DROP FUNCTION IF EXISTS "函数名";
CREATE FUNCTION ...
  1. 函数体内用到局部变量
--oracle,在return后定义变量
CREATE OR REPLACE FUNCTION ...
return 返回值类型
is
变量一 类型;//多个变量之间用;隔开
变量二 类型;
... ;

--mysql,在函数体内定义变量
BEGIN
DECLARE var_name[,...] type [DEFAULT value]
END
  1. 函数体内的赋值语句
--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万+ 关注 私信
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: