mysql中不定参函数如何下手?
类似于concat传参这样的函数。
希望高手给个例子。我看了些资料,ELT, FIELD之类的。没搞明白 。

解决方案 »

  1.   

    CREATE FUNCTION sp_name ([func_parameter[,...]])
        RETURNS type
        [characteristic ...] routine_body
        
        proc_parameter:
        [ IN | OUT | INOUT ] param_name type
        
        func_parameter:
        param_name type
     
    type:
        Any valid MySQL data type
     
    characteristic:
        LANGUAGE SQL
      | [NOT] DETERMINISTIC
      | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
      | SQL SECURITY { DEFINER | INVOKER }
      | COMMENT 'string'
     
    routine_body:
        Valid SQL procedure statement or statements
    在MYSQL的函数定义里可以看出,没有你要的东西。
    在VB里可以用optional 这样来定义参数的默认值。
      

  2.   

    MySQL 不支持数组,所有无法支持这个不定参数。如果一定想实现这个函数类似的功能,则可以把数组以一个字符串的形式传入,比如以逗号分隔的序列  1,4,67,44
      

  3.   

    举例说明,用动态生成SQL语句的方法试试
      

  4.   

    不能实现啊?concat怎么实现的?
      

  5.   

    哦。我想写一日志。对表的操作都需要调存储过程。在存储过程中写些日志。
    把字段和值,分别以某个符号隔开,存在两个字段当中。concat遇到的问题是碰到null值,整个值就是Null.concat_ws碰到NULL,忽略了。对应关系就找不到了。有什么好的办法记录操作日志?
      

  6.   

    CONCAT 是MYSQL中用C代码写得函数,并不是用MYSQL所提供的SQL语句或者存储过程语句实现的。你同样也可以自己用C或者其它程序语言按规则的接口方式写一个函数,然后集成到MYSQL中。
      

  7.   

    concat遇到的问题是碰到null值,整个值就是Null.NULL值你怎么处理,用空字符串?
      

  8.   


    我就想传字“NULL”字符处理。
    如果这样,每个字段都得加个ISNULL进行处理。我其实想偷懒。
      

  9.   

    用concat('123',IFNULL(field,'null'),'456')
    试试
      

  10.   


    这个我知道,谢谢。
    concat_ws可能更好些。
      

  11.   

    ACMAIN_CHM,wwwwb:感谢你俩的回复,我这种记录日志的方式可不可取?如果不可取,有什么好的方式?