首页数据库数据库自定义函数,DB2 自定义函数

数据库自定义函数,DB2 自定义函数

编程之家2023-10-21114次浏览

大家好,关于数据库自定义函数很多朋友都还不太明白,今天小编就来为大家分享关于DB2 自定义函数的知识,希望对各位有所帮助!

数据库自定义函数,DB2 自定义函数

sql查看自定义函数

可按如下方法查询,以sqlserver2008为例:

1、登录SQL Server Management Studio。

2、展开左边的树,先在数据库中找到自己创建自定义函数的库,如数据库-系统数据库-master。

3、依次点击可编程性-函数-标量值函数,如曾经创建过一个叫“fn_myget”的自定义函数,就能看见。

4、右键此函数,点击编辑,就能看到这个函数的源代码。

5、代码如图,红框部分即为源代码。

数据库自定义函数,DB2 自定义函数

数据库中函数的概念

函数其实就是一段程序代码,用户可以通过调用函数(有的需要加上相应的参数值)来执行一些特殊的运算或完成复杂的操作。函数可以分为系统内置函数和用户自定义函数。

系统内置函数通常包括系统函数、字符串函数、日期和时间函数、数学函数、转换函数等。例如求和sum,截取子串substring等。一般所有用户、程序中都可使用。

用户自定义函数由用户自己定义,当然相应的功能也由自己决定。

DB2 自定义函数

Db2自定义函数和存储过程初步

一、自定义函数

先做个简单的,将输入参数原样返回。

数据库自定义函数,DB2 自定义函数

CREATE FUNCTION ADMINISTRATOR.FUN1

(AAA VARCHAR(4)

)

RETURNS VARCHAR(4)

SPECIFIC ADMINISTRATOR.FUN1

LANGUAGE SQL

NOT DETERMINISTIC

READS SQL DATA

STATIC DISPATCH

CALLED ON NULL INPUT

EXTERNAL ACTION

INHERIT SPECIAL REGISTERS

BEGIN ATOMIC

DECLARE bbb VARCHAR(4);

set bbb= aaa;

return bbb;

END;

这是经过辅助工具生成的源码,我们可以发现如下几个特点:

1、在函数名定义中加入(输入参数名数据类型)

2、随后定义返回值类型

3、用BEGIN ATOMIC和END;作为起止标示

4、用set定义赋值

5、用return定义返回值

创建成功的函数怎莫说没找到?不要从字面上理解,很有可能是你输入函数的参数数据类型不匹配造成的,这在面向对象中不是叫多态吗。

改一下就可以输入整数了:

CREATE FUNCTION ADMINISTRATOR.FUN2

(AAA INTEGER

)

RETURNS INTEGER

SPECIFIC ADMINISTRATOR.SQL060220111756000

LANGUAGE SQL

NOT DETERMINISTIC

READS SQL DATA

STATIC DISPATCH

CALLED ON NULL INPUT

EXTERNAL ACTION

INHERIT SPECIAL REGISTERS

BEGIN ATOMIC

DECLARE bbb INTEGER;

set bbb= aaa;

return bbb;

END;

以上写的函数叫什莫玩意,下面做个和数据库打交道的,反正函数主要就是用于做对照的,返回值唯一。

CREATE FUNCTION ADMINISTRATOR.FUN3(AAA INTEGER)

RETURNS VARCHAR(20)

LANGUAGE SQL

BEGIN ATOMIC

DECLARE bbb VARCHAR(20);

set bbb=(select MONTH from IWH.LOOKUP_TIME where MONTH_ID= AAA);

return bbb;

END;

好了,懂得一些皮毛了。

二、存储过程

存储过程和函数很类似,只是用于批量实现一段逻辑的,而不是为了那个返回值,还有就是定义格式有些不同。

db2中提供了很多例子,下面就是一个定义游标和loop循环的。

-----------------------------------------------------------------------------

-- Licensed Materials- Property of IBM

--

-- Governed under the terms of the International

-- License Agreement for Non-Warranted Sample Code.

--

--(C) COPYRIGHT International Business Machines Corp. 1995- 2002

-- All Rights Reserved.

--

-- US Government Users Restricted Rights- Use, duplication or

-- disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

-----------------------------------------------------------------------------

--

-- SOURCE FILE NAME: loop.db2

--

-- SAMPLE: To create the LOOP_UNTIL_SPACE SQL procedure

--

-- To create the SQL procedure:

-- 1. Connect to the database

-- 2. Enter the command"db2-td@-vf loop.db2"

--

-- To call the SQL procedure from the command line:

-- 1. Connect to the database

-- 2. Enter the following command:

-- db2"CALL loop_until_space(?)"

--

-- You can also call this SQL procedure by compiling and running the

-- C embedded SQL client application,"loop", using the loop.sqc

-- source file available in the sqlproc samples directory.

-----------------------------------------------------------------------------

--

-- For more information on the sample scripts, see the README file.

--

-- For information on creating SQL procedures, see the Application

-- Development Guide.

--

-- For information on using SQL statements, see the SQL Reference.

--

-- For the latest information on programming, building, and running DB2

-- applications, visit the DB2 application development website:

-- http://www.software.ibm.com/data/db2/udb/ad

-----------------------------------------------------------------------------

CREATE PROCEDURE loop_until_space(OUT counter INT)

LANGUAGE SQL

BEGIN

DECLARE v_firstnme VARCHAR(12);

DECLARE v_midinit CHAR(1);

DECLARE v_lastname VARCHAR(15);

DECLARE v_counter SMALLINT DEFAULT 0;

DECLARE c1 CURSOR FOR

SELECT firstnme, midinit, lastname

FROM employee

ORDER BY midinit DESC;

DECLARE CONTINUE HANDLER FOR NOT FOUND

SET counter=-1;

-- initialize OUT parameter

SET counter= 0;

OPEN c1;

fetch_loop:

LOOP

FETCH c1 INTO

v_firstnme, v_midinit, v_lastname;

-- Use a local variable for the iterator variable

-- because SQL procedures only allow you to assign

-- values to an OUT parameter

SET v_counter= v_counter+ 1;

IF v_midinit='' THEN

LEAVE fetch_loop;

END IF;

END LOOP fetch_loop;

CLOSE c1;

-- Now assign the value of the local

-- variable to the OUT parameter

SET counter= v_counter;

END;

说明:

1、注释中写的很明白了,如何创建和执行。就是要注意,如果你想把代码拿出来执行,要把END@改为END;

2、不用C的 loop.sqc就可以了

3、注意与函数的不同:

a)起止标示begin\end不同

b)返回值定义不同,不定义return而在函数名定义中加OUT。。。。。。

格式定义

1.(IN deptNumber SMALLINT, OUT medianSalary DOUBLE)

使用(51,?)

2.游标

DECLARE c1 CURSOR FOR

SELECT firstnme, midinit, lastname

FROM employee

ORDER BY midinit DESC;

DECLARE CONTINUE HANDLER FOR NOT FOUND

SET counter=-1;

Open C1

Close C1

FETCH c1 INTO

v_firstnme, v_midinit, v_lastname;

3、Loop循环

fetch_loop:

LOOP

FETCH c1 INTO

v_firstnme, v_midinit, v_lastname;

SET v_counter= v_counter+ 1;

IF v_midinit='' THEN

LEAVE fetch_loop;

END IF;

END LOOP fetch_loop;

4、if

IF v_midinit='' THEN

LEAVE fetch_loop;

END IF

5、 CASE v_mod

WHEN 0 THEN

END CASE;

6、WHILE v_counter<(v_numRecords/ 2+ 1) DO

SET v_salary1= v_salary2;

FETCH c1 INTO v_salary2;

SET v_counter= v_counter+ 1;

END WHILE;

数据库自定义函数和DB2 自定义函数的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

php操作数据库(php中选择打开数据库的方法是)mysql数据库视图(mysql 如何查看视图)