精华内容
下载资源
问答
  • 创建用户自定义函数

    2012-05-10 22:18:24
    //创建用户自定义函数------标量函数 转:http://hi.baidu.com/wuxinyuyun/blog/item/a252b87ac2b704eb2e73b330.html create function dbo.bmrs(@bmh as int) returns int as begin declare @bmrs int ...

    //创建用户自定义函数------标量函数

    转:http://hi.baidu.com/wuxinyuyun/blog/item/a252b87ac2b704eb2e73b330.html

    create function dbo.bmrs(@bmh as int)

    returns int

    as

    begin

    declare @bmrs int

    select @bmrs=count(工号)from 销售人员 where 部门号=@bmh

    return @bmrs

    end

    go

    exec sp_help  销售人员

    go

    //标量函数的调用

    declare @bmrs int

    select @bmrs=dbo.bmrs(2)

    select '2号部门人数'=@bmrs

    go

    select '2号部门人数 '+convert(varchar(4),dbo.bmrs(3))

    select 部门经理,部门名称,实际人数=dbo.bmrs(部门号) from 部门信息

    go

    select 部门经理,部门名称,实际人数=dbo.bmrs(部门号) from 部门信息 where 部门号=2

    //创建内嵌表值函数

    ----------a.订单号,销售人员=b.姓名,客户=c.姓名,供应商=d.名称,a.数量,a.总金额

    ------------以部门名称作为输入参数,创建部门订单内嵌表值函数

    select * from 部门信息

    select * from 订单信息

    select * from 客户信息

    select * from 供应商信息

    select * from 销售人员

    go

    ----------创建内嵌表值函数

    create function dbo.bmdd(@bmmc as varchar(10))

    returns table

    as

    return( select a.订单号,销售人员=b.姓名,客户=c.姓名,供应商=d.名称,a.总金额,a.数量

    from 订单信息 as a inner join 销售人员 as b on a.销售工号=b.工号 inner join 客户信息 as c

    on a.客户编号=c.员工编号 inner join 供应商信息 as d on a.货品编码=d.编码 inner join 部门信息 as e

    on b.部门号=e.部门号 where 部门名称=e.部门名称)

    go

    ----------内嵌表值函数的调用

    select * from dbo.bmdd('销售部')

    --------------创建内嵌表值函数的语法格式

    create function 函数所有者.函数名称(标量参数 as 标量参数数据类型)

    returns table

    as

    return (select语句)

    -----------创建视图的语法格式

    create view 视图名 as select语句

    ----------------用create function语句创建函数。

    函数名在数据库汇总必须唯一用户定义函数可以有输入参数并返回值,但是没有输出参数

    create function 所有者.函数名(标量参数 as 标量数据类型)

    returns 标量参数数据类型

    as

    begin

    函数体

    return 变量//标量表达式

    end

    ----------多语句表值函数的返回值是表,有函数体,在函数体中可以使用表变量。

    创建多语句表值函数语法格式:

    create function [所有者名称.]函数名称(@参数名称 as 标量数据类型)

    returns @表变量 table 表的定义

    as

    begin

    函数体

    return

    end

    go

    说明:表(table)变量是一种特殊的数据类型,可用于函数、存储过程和批处理中,用于存储结果集以供以后处理。该数据类型主要用于临时存储一组行,这些行将作为表值函数的结果集返回。

    table变量的行为类似于局部变量,其作用域为声明该变量的函数、存储过程或批处理,其生命周期在定义table变量的

    函数、存储过程呢过和批处理结束时将自动清楚table变量。

    表(table)变量的声明语法:declare @local_variable table(表的定义)

    /*根据订单信息表查询得出每个销售人员所开的订单数。查询的结果包括销售人

    员工号和订单数。下面,我们采用表变量的方式将查询的结果集保存下来,以便程序使用。*/

    declare @ordernum

    table(销售工号 int,

    订单数 int)

    ---使用insert....select语句向表变量中插入记录

    insert @ordernum

    select 销售工号,订单数=count(销售工号) from 订单信息 group by 销售工号

    select * from @ordernum

    go

    /*在market数据库中,创建一个多语句表值函数,它可以查询指

    定部门每个销售人员的订单数,该函数接收输入的部门号,通过查询“订单信息”表返回销售人员的工号、姓名和订单数。*/

    ---创建多语句表值函数

    create function dbo.info(@bmh as int)

    returns @xsry table(工号 int primary key,

    姓名 varchar(10),

    订单数 int)

    as

    begin

    declare @ordernum

    table(销售工号 int,订单数 int)

    insert @ordernum select 销售工号,订单数=count(销售工号) from 订单信息 group by 销售工号

    insert @xsry select a.工号,a.姓名,b.订单数 from 销售人员 as a left join @ordernum as b on a.工号=b.销售工号

    where a.部门号=@bmh

    return

    end

    go


    展开全文
  • 总有一些复杂的逻辑我们还需要多处使用,此时就显现出函数的重要性。 mysql函数的要素 函数名 参数列表 函数体 返回值 定义语法 create function fun_name(参数列表) returns 返回值类型 函数体 示例 不带参数 ...

    总有一些复杂的逻辑我们还需要多处使用,此时就显现出函数的重要性。

    mysql函数的要素

    • 函数名
    • 参数列表
    • 函数体
    • 返回值

      定义语法

      create function fun_name(参数列表)
      returns 返回值类型
      函数体

      示例

      不带参数

      delimiter $$
      create function sayhello() 
      returns varchar(20)
      begin
      return 'hello';
      end$$ 
      delimiter ;

      调用示例:
      select sayhello();

    sayhello()
    hello

    带参数(参数需要标明数据类型)

        delimiter $$
        create function sayHelloToSomeOne(name varchar(20))
        returns varchar(25)
        begin
        set @str = concat('hello ',name);
        return @str;
        end
        $$
        delimiter ;

    调用示例:
    select sayHelloToSomeOne('Dany');

    sayHelloToSomeOne('Dany')
    hello Dany

    函数调用过后我们验证一下@str变量是否依然可以访问。
    select @str;

    @str
    hello Dany

    @str依然可用,说明@str的作用域是全局的。

    带多个参数

    多个参数用逗号 , 分隔。

    函数中的局部变量

    1. 参数(勉强认为是局部变量),因为参数传递进来只能在函数内部使用。
    2. declare 定义局部变量
      之前研究过以@开头的变量是全局变量,因为即使是在函数内部定义的变量例如:@aa ,在调用过函数后,@aa的值在外部我们依然可以得到,这就很明显的告诉我们,@aa是全局变量。
      全局变量容易引发变量污染,所以我们需要局部变量,来保证程序独立。declare就是为了解决这一问题。

    语法:
    DECLARE var_name [, var_name] ... type [DEFAULT value];
    例如:

        delimiter $$
        create function sayHelloToSomeOneVarLocal(name varchar(20))
        returns varchar(30)
        begin
        declare str varchar(30);
        set str = concat('hello ',name);
        return str;
        end
        $$
        delimiter ;

    select sayHelloToSomeOneVarLocal('xiaogang');

    sayHelloToSomeOneVarLocal('xiaogang')
    hello xiaogang

    函数调用之后我们再试图去访问变量str,会报错。

    转载于:https://blog.51cto.com/7859800/2122245

    展开全文
  • 数据库 用户自定义函数

    千次阅读 2020-02-04 19:03:19
    文章目录用户自定义函数用户自定义函数和存储过程比较创建用户自定义函数管理用户自定义函数 用户自定义函数 用户自定义函数和存储过程比较 比较项 存储过程 用户自定义函数 参数 允许有多个输入输出参数 ...

    用户自定义函数

    用户自定义函数和存储过程比较

    比较项 存储过程 用户自定义函数
    参数 允许有多个输入输出参数 允许有0到多个输入参数,不允许有多个输出参数(且参数要用用括号括起来)
    返回值 可以没有返回值 有且只有一个返回值
    调用 使用excute调用 在表达式或者赋值语句中调用

    创建用户自定义函数

    (1)创建标量型函数
    eg:1)在student数据库中,创建标量函数,统计“课程”表中总共有多少条门课程,写出程序代码。(要求:在建立函数之前,为排除重名函数,先判断要创建的函数是否存在,如果存在则先删除。)

    use student
    go
    if exists (select name from sysobjects where name = 'Ccount' and type = 'FN')
    drop function dbo.Ccount
    go
    create function dbo.Ccount()
    returns int
    as
    begin
    		declare @num int
    		set @num = 0
    		select @num = count(*)
    		from 学生课程
    		return @num
    end
    go
    -- 调用函数查询
    use student
    go
    declare @num int
    set @num = 0
    set @num = dbo.Ccount()
    print '课程表中总共有:'+cast(@num as char(1)) + '门课程'
    go
    
    
    

    (2)创建内联表值函数(没有函数主体,表是单个select语句的结果,直接return select语句的值)
    eg:在student数据库中,创建内嵌表值函数,该函数给出制定学生所选修课程记录,即“学号”作为输入参数,写出程序代码。

    if exists (select name from sysobjects where name = 'Cchoose' and type = 'FN')
    drop function dbo.Cchoose
    go
    create function dbo.Cchoose(@Cname as nvarchar(20))
    returns table
    as
    return (select a.学号
    		from 学生成绩 a,学生课程 b
    		where  a.课程号 = b.课程号 and b.课程名称 = @Cname)
    go
    -- 调用函数查询选修C语言情况
    use student
    go
    declare @Cname nvarchar(20)
    set @Cname = 'C语言'
    select *
    from dbo.Cchoose(@Cname)
    go
    

    (3)创建多语句表值函数(返回一个表)

    if exists (select name from sysobjects where name = 'Cchoose1' and type = 'FN')
    drop function dbo.Cchoose1
    go
    create function dbo.Cchoose1 (@Cname as nvarchar(20))
    returns @Cchoosetable table (学号 char(7))
    as
    begin
    		insert @Cchoosetable
    		select a.学号
    		from 学生成绩 a,学生课程
    		where  a.课程号 = b.课程号 and b.课程名称 = @Cname 
    		return
    end
    go
    -- 调用函数查询学修C语言情况
    use student
    go
    declare @Cname nvarchar(20)
    set @Cname = 'C语言'
    select *
    from dbo.Cchoose1(@Cname)
    go
    
    

    管理用户自定义函数

    (1)查看用户自定义函数
    exec sp_helptext 用户定义函数名称
    exec sp_help 用户定义函数名称
    (2)修改用户定义函数
    alter function 用户自定义函数名

    重写一遍函数的实现

    (3)删除用户定义的函数
    drop function 用户自定义的函数名

    展开全文
  • 在Spark中,也支持Hive中的自定义函数自定义函数大致可以分为三种: ...UDAF(User- Defined Aggregation Funcation),用户自定义聚合函数,类似在group by之后使用的sum,avg UDTF(User-Defined Table-Gen...

    在Spark中,也支持Hive中的自定义函数。自定义函数大致可以分为三种:

    • UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_date等
    • UDAF(User- Defined Aggregation Funcation),用户自定义聚合函数,类似在group by之后使用的sum,avg
    • UDTF(User-Defined Table-Generating Functions),用户自定义生成函数,有点像stream里面的flatMap

    一、自定义UDF 拼接三个参数,

    1.1继承org.apache.spark.sql.api.java.UDFxx(1-22);

    1.2、实现call方法

        @Override
        public String call(Long v1, String v2, String split) throws Exception {
            return String.valueOf(v1) + split + v2;
        }

    完整代码实现

    package com.chb.shopanalysis.hive.UDF;
    
    import org.apache.spark.sql.api.java.UDF3;
    
    /**
     * 自定义UDF
     * 1 上海  split
     * 拼接成"1:上海"
     * 将两个字段拼接起来(使用指定的分隔符)
     * @author chb
     *
     */
    public class ConcatLongStringUDF implements UDF3<Long, String, String, String> {
    
        private static final long serialVersionUID = 1L;
    
        @Override
        public String call(Long v1, String v2, String split) throws Exception {
            return String.valueOf(v1) + split + v2;
        }
    
    }
    

    1.4、注册函数

            // 注册自定义函数
            sqlContext.udf().register(
                    "concat_long_string",       //自定义函数的名称
                    new ConcatLongStringUDF(),  //自定义UDF对象
                    DataTypes.StringType);      //返回数据类型

    1.5、使用函数

        /**
         * 从hive表中读取数据, 使用自定义聚合函数
         */
        private static void readProductClickInfo() {
    
            // 可以获取到每个area下的每个product_id的城市信息拼接起来的串
    
            String sql = 
                    "SELECT city_id, city_name,"
                        + "area,"
                        + "product_id,"
                        + "concat_long_string(city_id,city_name,':') city_infos "  
                    + "FROM click_product_basic ";
    
    
    
            // 使用Spark SQL执行这条SQL语句
            DataFrame df = sqlContext.sql(sql);
            //展示结果
            df.show();
    
        }

    这里写图片描述

    二、用户自定义聚合函数UDAF

    2.1、继承org.apache.spark.sql.expressions.UserDefinedAggregateFunction

    2.2、定义输入,缓存,输出字段类型

        // 指定输入数据的字段与类型
        private StructType inputSchema = DataTypes.createStructType(Arrays.asList(
                DataTypes.createStructField("cityInfo", DataTypes.StringType, true)));  
        // 指定缓冲数据的字段与类型
        private StructType bufferSchema = DataTypes.createStructType(Arrays.asList(
                DataTypes.createStructField("bufferCityInfo", DataTypes.StringType, true)));  
        // 指定返回类型
        private DataType dataType = DataTypes.StringType;

    2.3、deterministic()决定每次相同输入,是否返回相同输出, 一般都会设置为true.

        @Override
        //每次相同的输入是否返回相同的输出
        public boolean deterministic() {
            return deterministic;
        }

    2.4、初始化

        /**
         * 初始化
         * 可以认为是,你自己在内部指定一个初始的值
         */
        @Override
        public void initialize(MutableAggregationBuffer buffer) {
            buffer.update(0, "");  
        }

    2.5、更新, 这个是组类根据自己的逻辑进行拼接, 然后更新数据

        /**
         * 更新
         * 可以认为是,一个一个地将组内的字段值传递进来
         * 实现拼接的逻辑
         */
        @Override
        public void update(MutableAggregationBuffer buffer, Row input) {
            // 缓冲中的已经拼接过的城市信息串
            String bufferCityInfo = buffer.getString(0);
            // 刚刚传递进来的某个城市信息
            String cityInfo = input.getString(0);
    
            // 在这里要实现去重的逻辑
            // 判断:之前没有拼接过某个城市信息,那么这里才可以接下去拼接新的城市信息
            if(!bufferCityInfo.contains(cityInfo)) {
                if("".equals(bufferCityInfo)) {
                    bufferCityInfo += cityInfo;
                } else {
                    // 比如1:北京
                    //2:上海
                    //结果 1:北京,2:上海
                    //再 来一个 1:北京  就不会拼接进去。
                    bufferCityInfo += "," + cityInfo;
                }
    
                buffer.update(0, bufferCityInfo);  
            }
        }
    

    2.6、合并, 将所有节点的数据进行合并

        /**
         * 合并
         * update操作,可能是针对一个分组内的部分数据,在某个节点上发生的
         * 但是可能一个分组内的数据,会分布在多个节点上处理
         * 此时就要用merge操作,将各个节点上分布式拼接好的串,合并起来
         */
        @Override
        public void merge(MutableAggregationBuffer buffer1, Row buffer2) {
            String bufferCityInfo1 = buffer1.getString(0);
            String bufferCityInfo2 = buffer2.getString(0);
    
            for(String cityInfo : bufferCityInfo2.split(",")) {
                if(!bufferCityInfo1.contains(cityInfo)) {
                    if("".equals(bufferCityInfo1)) {
                        bufferCityInfo1 += cityInfo;
                    } else {
                        bufferCityInfo1 += "," + cityInfo;
                    }
                }
            }
            buffer1.update(0, bufferCityInfo1);  
        }
    

    2.7、输出最终结果, 可能我们需要的输出格式,可以在该方法中,进行格式化。

            @Override
            //计算出最终结果
            public Object evaluate(Row row) {  
                return row.getString(0);  
            }

    2.8、注册函数

            sqlContext.udf().register("group_concat_distinct", 
                    new GroupConcatDistinctUDAF());

    2.9、使用

        /**
         * 从hive表中读取数据, 使用自定义聚合函数
         */
        private static void readProductClickInfo() {
            // 按照area和product_id两个字段进行分组
            // 计算出各区域各商品的点击次数
            // 可以获取到每个area下的每个product_id的城市信息拼接起来的串
    
            String sql =  "SELECT  area, product_id,"
                    + "count(*) click_count, "  
                    + "group_concat_distinct(concat_long_string(city_id,city_name,':')) city_infos "  
                    + "FROM click_product_basic "
                    + "GROUP BY area,product_id "; 
    
            // 使用Spark SQL执行这条SQL语句
            DataFrame df = sqlContext.sql(sql);
    
            df.show();
            // 再次将查询出来的数据注册为一个临时表
            // 各区域各商品的点击次数(以及额外的城市列表)
            df.registerTempTable("tmp_area_product_click_count");    
        }
    展开全文
  • (1)创建一个返回标量值的用户定义函数 RectangleArea:输入矩形的长和宽就能计算矩形的面积。 ...CREATE function RectangleArea...(2)创建一个用户自定义函数,功能为产生一张有关学生成绩统计的报表。该报
  • SQL SERVER的用户自定义函数可以在T-SQL中自由...在“企业管理器->数据库->用户自定义函数”下面,点右键创建新的自定义函数,和创建存储过程类似: 这是一个将IP地址转换成BigInt的函数: CREATE FUNCTION GetIPN
  • Hive用户自定义函数

    万次阅读 2019-12-04 10:03:20
    1. 当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF: user-defined function) 2.UDF 开发步骤 1.新建 JAVA Maven 项目,pom文件中添加 hive-exec-1.1.0.jar 和 hadoop-...
  • SQL Server用户自定义函数

    千次阅读 2018-08-20 20:04:39
    SQL Server用户自定义函数 前几篇博文介绍了不少SQL Server系统自带函数方面的使用方法,这次将学习SQL Sever用户自定义函数的使用方法,算是对SQL Server函数的补充。希望与园里的朋友共同学习并取经。 关于SQL ...
  • laravel创建或扩展用户自定义函数

    千次阅读 2016-06-14 14:30:08
    在根目录下的app目录下创建一个文件夹Common,然后新建一个functions.php的文件,接着就可以根据需要写入自己的自定义函数啦,不过为了避免和laravel框架自身的函数冲突,最后在定义之前,先作一下判断。 例如: if...
  • 用户自定义函数

    2010-09-14 17:33:00
     用户自定义函数(User Defined Functions)是SQL Server 的数据库对象,它不能用于执行一系列改变数据库状态的操作,但它可以像系统函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过...
  • python自定义函数

    千次阅读 2018-06-01 16:33:57
    也可以创建用户自定义函数。 函数定义 函数定义的简单规则: 函数代码块以def关键词开头,后接函数标识符名称和圆括号(),任何传入参数和自变量必须放在圆括号中间 函数内容以冒号起始,并且缩进 若有返回值...
  • PostgreSQL函数也称为PostgreSQL存储过程。 PostgreSQL函数或存储过程是存储在数据库服务器上并可以使用SQL界面...要在 PostgreSQL 定义一个新的用户自定义函数,需要使用CREATE FUNCTION语句,如下所示: CREAT...
  • hive用户自定义函数

    千次阅读 2011-08-02 17:01:03
    hive用户自定义函数
  • awk用户自定义函数

    千次阅读 2015-05-13 20:19:54
    脚本中凡是可以出现模式操作规则的位置都可以放置用户自定义函数。 格式 函数名(参数,参数,参数, ...){  语句  return 表达式  (注: return语句和表达式都是可选项) } 变量以参数值的方式...
  • Hive创建自定义函数

    2019-03-28 03:01:22
    如果hive的内置函数不够用,用户也可以自己定义函数来使用,这样的函数称为hive的用户自定义函数,简称UDF UDF使得Hive的可扩展性增强 二、实现步骤: 新建java工程,导入hive相关包,导入hive相关的lib 创建类...
  • SQL用户自定义函数

    2013-12-17 16:05:06
     用户自定义函数(User Defined Functions)是SQL Server 的数据库对象,它不能用于执行一系列改变数据库状态的操作,但它可以像系统函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过EXECUTE ...
  • AWK用户自定义函数

    千次阅读 2015-11-11 14:39:03
    函数是程序的基本组成部分。...下面给出的是用户自定义函数的一般格式为: function function_name(argument1, argument2, ...) { function body } 在上面的语法: function_name是用户定义函数的名
  • DROP FUNCTION IF EXISTS increaseSeq ;DELIMITER //CREATE FUNCTION increaseSeq() RETURNS INTEGERDETERMINISTICBEGINset @peng:=IFNULL(@peng,0)+1;RETURN @peng ;END//DELIMITER ;
  • 用户自定义函数(User Defined Functions)是SQL Server 2000 新增的数据库对象,是SQL Server 的一大改进。 用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统函数一样在查询或存储过程等的...
  • Hive——用户自定义函数(UDF)

    万次阅读 2016-03-16 20:16:01
    Hive——用户自定义函数(UDF)  用户自定义函数(UDF)是一个允许用户扩展HiveQL的强大的功能。用户可以使用Java编写自己的UDF,一旦将用户自定义函数加入到用户会话中(交互式的或者通过脚本执行的),它们就将和内置...
  • SQL—用户自定义函数

    千次阅读 2012-06-29 20:41:07
    用户自定义函数是SQL Server 的数据库对象,它不能用于执行一系列改变数据库状态的操作,但它可以像系统函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过EXECUTE 命令来执行。用户自定义函数...
  • SQL Server中的用户自定义函数

    千次阅读 2014-04-06 14:26:00
    SQL Server中的用户自定义函数用户自定义函数(UDF:User Defined Functions)的定义:同存储过程类似,用户自定义函数是一组有序的T-SQL语句,UDF被预先优化和编译并且可以作为一个单元来进行调试。UDF和存储过程的...
  • SQL之用户自定义函数

    千次阅读 2012-02-01 17:48:02
    用户自定义函数(User Defined Functions)是SQL Server 的数据库对象,它不能用于执行一系列改变数据库状态的操作,但它可以像系统函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过EXECUTE ...
  • Python基础:自定义函数及函数基本使用

    千次阅读 多人点赞 2019-02-04 00:09:34
    文章目录自定义函数及函数基本使用语法函数的...也可以创建用户自定义函数。说白了就是将一系列的代码封装起来,实现代码的复用。 语法 函数的代码块以 def 开头,后面接函数标识符名称和小括号 () ,也可以传入参...
  • 在SSMS中会有两种函数:内置函数,用户自定义函数。 内置函数,如max(),min() 用户自定函数是自己编写的函数,分为标量函数,表函数 先介绍一下标量函数范例: 1.创建标量函数 create function Greatest(@v1 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 553,937
精华内容 221,574
关键字:

如何创建用户自定义函数