`
xwood
  • 浏览: 102099 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

数据库函数

阅读更多
一、函数创建
SQL SERVER:

“自定义函数”是我们平常的说法,而“用户定义的函数”是 SQL Server 中书面的说法。

SQL Server 2000 允许用户创建自定义函数,自定义函数可以有返回值。

自定义函数分为:标量值函数或表值函数

如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数。可以使用多条 Transact-SQL 语句定义标量值函数。
如果 RETURNS 子句指定 TABLE,则函数为表值函数。
表值函数又可分为:内嵌表值函数(行内函数)或多语句函数

如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数。
如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数。

1.标量值函数示例

create function getWorkerWelfare(@welfareid varchar(60), @absentsum varchar(10), @daymoney varchar(10), @type varchar(40))
returns decimal(7, 2)
as
begin
	--declare @welfareid varchar(60)
	--declare @absentsum varchar(10)
	--declare @daymoney varchar(10)
	--declare @type varchar(40)
	--set @welfareid = 'EB2011021212973401863681954589888'
	--set @absentsum = '0.5'
	--set @daymoney = '80'
	--set @type = '勤杂人员'

	--创建补贴标准游标
	declare cur_allo cursor for
	select absentbegin, absentend, laborallowance, medicalallowance, attendallowance
	from t_worker_allowance_standard 
	--where groupid = (select workerallowancegroupid from t_worker_welfare_standard where id = @welfareid) 
	where groupid = (select workerallowancegroupid from t_worker_welfare_standard where id = @welfareid) 
	
	--创建工人类型标准游标
	declare cur_type cursor for
	select monetizebegin, monetizeend, workertype, attendallowanceper
	from t_worker_type_standard 
	--where groupid = (select workertypegroupid from t_worker_welfare_standard where id = @welfareid) 
	where groupid = (select workertypegroupid from t_worker_welfare_standard where id = @welfareid) 

	declare @absentbegin varchar(10)
	declare @absentend varchar(10)
	declare @laborallowance varchar(10)
	declare @medicalallowance varchar(10)
	declare @attendallowance varchar(10)
	
	declare @monetizebegin varchar(10)
	declare @monetizeend varchar(10)
	declare @workertype varchar(40)
	declare @attendallowanceper varchar(10)
	
	declare @welfare decimal(7, 2)
	set @welfare = 0
	
	open cur_allo
	open cur_type
	fetch next from cur_allo into @absentbegin, @absentend, @laborallowance, @medicalallowance, @attendallowance
	while @@fetch_status = 0
	begin
		if @@fetch_status = -2	continue
		if @absentbegin = '#' set @absentbegin = '-1'
		if @absentend = '#' set @absentend = '9999999999'
		if cast(@absentsum as numeric(7, 2)) >= cast(@absentbegin as numeric(12, 2)) and cast(@absentsum as numeric(7,2)) < cast(@absentend as numeric(12, 2))
		begin
			--print('出勤区间:' + @absentbegin + '---' + @absentend);
			fetch next from cur_type into @monetizebegin, @monetizeend, @workertype, @attendallowanceper
			while @@fetch_status = 0
			begin
				if @monetizebegin = '#' set @monetizebegin = '-1'
				if @monetizeend = '#' set @monetizeend = '9999999999'
				if patindex('%' + @type + '%', @workertype) > 0 and cast(@daymoney as numeric(7, 2)) >= cast(@monetizebegin as numeric(12, 2)) and cast(@daymoney as numeric(7, 2)) < cast(@monetizeend as numeric(12, 2))
				begin
					--print('货币化工资区间:' + @monetizebegin + '-' + @monetizeend)
					set @welfare = cast(@laborallowance as numeric(7, 2)) + cast(@medicalallowance as numeric(7, 2)) + cast(@attendallowance as numeric(7, 2)) * cast(@attendallowanceper as numeric(7,2)) / 100
					--print('福利工资:' + cast(@welfare as varchar(20)))
				end
				--print('货币化区间:' + @monetizebegin + '---' + @monetizeend)
				fetch next from cur_type into @monetizebegin, @monetizeend, @workertype, @attendallowanceper
			end
		end
		fetch next from cur_allo into @absentbegin, @absentend, @laborallowance, @medicalallowance, @attendallowance
	end
	close cur_allo
	close cur_type
	deallocate cur_allo
	deallocate cur_type

	return @welfare
end


2.内嵌表值函数示例

CREATE FUNCTION dbo.Foo()
RETURNS TABLE
AS  
    return select id, title from msgs
--内嵌表值函数只有一个 select 语句。


3.多语句表值函数示例(部分)

CREATE FUNCTION fn_FindReports (@InEmpId nchar(5))
RETURNS @retFindReports TABLE (empid nchar(5) primary key,
   empname nvarchar(50) NOT NULL,
   mgrid nchar(5),
   title nvarchar(30))
...
--注意其 RETURNS 部分。

多语句函数标量值函数的主体中允许使用以下语句。未在下面的列表中列出的语句不能用在函数主体中。

1).赋值语句。
2).控制流语句。
3).DECLARE 语句,该语句定义函数局部的数据变量和游标。
4).SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
5).游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
6).INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
7).EXECUTE 语句调用扩展存储过程。
分享到:
评论

相关推荐

    数据库函数和查询语句

    综上所述,数据库函数和查询语句是数据库管理系统中的基础操作,用于创建、更新、删除和查询数据,同时还需要了解锁定机制和并发控制策略,以保证数据的准确性和完整性。掌握这些知识对于理解和操作数据库至关重要。

    DB2数据库函数大全

    这只是DB2数据库函数的一部分,实际上DB2还提供了许多其他功能强大的函数,包括日期处理、字符串操作、数学计算、类型转换等,它们在数据库查询和报表生成中起着至关重要的作用。掌握这些函数的使用,能极大地提高...

    MySql数据库函数大全[收集].pdf

    MySQL 数据库函数大全 MySQL 数据库函数大全是一份详细的函数大全,涵盖了字符串、数字、日期和时间等多个方面的函数。本文档将对其中的一些重要函数进行详细的解释。 一、字符串函数 ASCII(str) 函数返回字符串 ...

    cognos 数据库函数

    在IBM Cognos Analytics中,数据库函数是进行数据查询、分析和报告时不可或缺的一部分。Cognos使用SQL(结构化查询语言)与各种数据库进行交互,而SQL中的函数可以帮助我们处理和操纵数据。本篇文章将深入探讨Cognos...

    数据库函数数据库函数.doc

    数据库函数详解 数据库函数是数据库管理系统中的一种功能强大且实用的工具,它可以对字符串、数字、日期等数据类型进行处理和操作。本文将对常用的数据库函数进行详细的介绍,包括字符函数、字符串替代函数、字符级...

    Excel 340例常用函数说明,Excel常用函数,信息函数、数学与三角函数、数据库函数、文本函数、查找与引用函数、统计函数

    Excel 340例常用函数说明,Ex常用函数,信息函数、数学与三角函数、数据库函数、文本函数、查找与引用函数、统计函数 信息函数18例、工程函数39例、数学与三角函数58例、数据库函数13例、文本函数34例、日期与时间...

    Excel函数应用之数据库函数.pdf

    Excel 函数应用之数据库函数 数据库函数是 Microsoft Excel 中的一类函数,用于对存储在数据清单或数据库中的数据进行分析。这些函数统称为数据库函数(Dfunctions)。数据库函数有三个参数:database、field 和 ...

    函数应用之数据库函数-secret.docx

    《Excel函数应用之数据库函数详解》 Excel中的数据库函数,又称Dfunctions,是专门用于处理和分析存储在数据清单或数据库中的数据的一类特殊函数。这些函数提供了强大的数据分析能力,帮助用户快速筛选、统计和计算...

    Excel函数应用之数据库函数实用.pdf

    "Excel函数应用之数据库函数实用" Excel 函数应用之数据库函数实用是指在 Microsoft Excel 中使用的一些工作表函数,用于对存储在数据清单或数据库中的数据进行分析,这些函数统称为数据库函数(Dfunctions)。...

    Excel函数之数据库函数

    在Excel中,数据库函数是一组专门设计用于处理大型数据列表的工具,它们允许用户执行类似于在数据库管理系统中进行的操作,如筛选、查询、计算和汇总数据。这些函数可以帮助用户高效地管理和分析数据,无需借助复杂...

    H2Database.rar_H2Database聚合函数_H2数据库函数||_h2数据库修改

    本文档将深入探讨H2Database的聚合函数以及如何进行数据库的修改。 一、H2Database聚合函数 聚合函数在SQL中用于对一组值进行计算,返回单个结果。在H2Database中,常用的聚合函数有以下几种: 1. COUNT():计算...

    db2和mysql数据库函数

    DB2 和 MySQL 数据库函数大全 数据库函数是数据库管理系统中的一组预定义函数,用于对数据进行处理、计算和分析。DB2 和 MySQL 是常用的关系数据库管理系统,它们提供了丰富的函数集合,帮助用户更方便地处理和分析...

    数据库函数、存储过程详解

    数据库函数和存储过程是数据库管理系统中的重要组成部分,它们在数据处理和业务逻辑实现中起着核心作用。在Sybase数据库系统中,这两者都提供了强大的功能,帮助开发者更有效地管理和操作数据。 首先,我们来详细...

    数据库函数ppt

    一个关于数据库函数的ppt文档,帮助有兴趣的人学习mysql数据库函数。

    10Excel函数应用之数据库函数[归纳].pdf

    Excel 函数应用之数据库函数 本文将对 Excel 中的数据库函数进行详细介绍,涵盖了数据库函数的共同特点、列表、参数含义、应用示例等。 一、数据库函数的共同特点 数据库函数是一类特殊的函数,用于对存储在数据...

    oracle 数据库函数大全

    包含了oracle所有的函数 例如replace to_char date等67个函数

    MySQL数据库函数,触发器,存储过程

    **一、MySQL数据库函数** 函数是预定义的代码块,接受一个或多个参数,并返回一个值。MySQL提供了丰富的内置函数,包括数值函数(如ABS、SQRT)、字符串函数(如CONCAT、SUBSTRING)、日期和时间函数(如NOW、DATE_...

    SQL和Oracle数据库函数说明

    本文将深入探讨SQL和Oracle数据库中的函数,以帮助初学者更好地理解和运用这些工具。 SQL函数是处理数据库数据的基本操作单元,它们允许我们执行计算、转换和数据提取。常见的SQL函数包括: 1. **聚合函数**:如`...

    VB6.0开发后的数据库函数总结及数据库操作

    ### VB6.0 开发中的数据库函数总结及数据库操作 #### 概述 在VB6.0中进行数据库开发是一项常见的任务,它涉及到多种数据库函数和技术的使用。本文档将重点介绍VB6.0中的一些关键数据库函数及其应用场景,并通过...

Global site tag (gtag.js) - Google Analytics