起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5670|回复: 11

[结贴] mysql是否支持创建function函数?

[复制链接]

107

主题

496

帖子

2270

积分

金牌会员

Rank: 6Rank: 6

积分
2270
QQ
发表于 2014-10-31 13:05:36 | 显示全部楼层 |阅读模式
版本: X5.2.7 小版本号:
数据库: MySQL 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
本帖最后由 小小 于 2014-10-31 13:08 编辑

平台自带的mysql创建function函数失败!语法完全按照mysql的标准语法来的,求解!


DELIMITER $$
CREATE FUNCTION f_query_user()
RETURNS VARCHAR(100) CHARSET gbk
BEGIN
DECLARE c VARCHAR(100) DEFAULT '0';
  SELECT
               fid into c
                FROM
                    CO_Contract_SignOpinion s
                WHERE
                    s.fContractID = '4D15EE3B81FC440D9B405698066899AC'
                ORDER BY
                    s.fEnterDate ASC;
RETURN c;
END $$
     DELIMITER;

创建function.jpg
创建function2.jpg

94

主题

1141

帖子

2380

积分

金牌会员

Rank: 6Rank: 6

积分
2380
发表于 2014-10-31 13:11:08 | 显示全部楼层
当然是支持函数的,是你的语句写得有问题
回复 支持 反对

使用道具 举报

89

主题

1377

帖子

1837

积分

金牌会员

Rank: 6Rank: 6

积分
1837
QQ
发表于 2014-10-31 13:17:58 | 显示全部楼层
一定要设置返回值编码类型吗?  那个c的默认改为null试试DELIMITER $$
CREATE FUNCTION f_query_user()  
BEGIN
DECLARE c VARCHAR(100) DEFAULT null;
  SELECT
               fid into c
                FROM
                    CO_Contract_SignOpinion s
                WHERE
                    s.fContractID = '4D15EE3B81FC440D9B405698066899AC'
                ORDER BY
                    s.fEnterDate ASC;
RETURN c;
END $$
     DELIMITER;

评分

参与人数 1 +3 收起 理由
jishuang + 3 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

107

主题

496

帖子

2270

积分

金牌会员

Rank: 6Rank: 6

积分
2270
QQ
 楼主| 发表于 2014-10-31 13:18:14 | 显示全部楼层
jason2014 发表于 2014-10-31 13:11
当然是支持函数的,是你的语句写得有问题

首先感谢你的回复,我也知道有问题,所以才发贴,请高人指点!
回复 支持 反对

使用道具 举报

107

主题

496

帖子

2270

积分

金牌会员

Rank: 6Rank: 6

积分
2270
QQ
 楼主| 发表于 2014-10-31 13:48:57 | 显示全部楼层
cyteamo 发表于 2014-10-31 13:17
一定要设置返回值编码类型吗?  那个c的默认改为null试试DELIMITER $$
CREATE FUNCTION f_query_user()  
BE ...


感谢你的回答,没有returns语句,也会报错!
创建function23.jpg
创建function4.jpg
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35942
发表于 2014-10-31 15:50:55 | 显示全部楼层
到mysql数据库中执行看看,不是这studio中执行
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

89

主题

1377

帖子

1837

积分

金牌会员

Rank: 6Rank: 6

积分
1837
QQ
发表于 2014-10-31 15:54:33 | 显示全部楼层
jishuang 发表于 2014-10-31 15:50
到mysql数据库中执行看看,不是这studio中执行

...这个居然是studio里面,我还说弹出错误信息上面有X5的标识呢...长见识了.
回复 支持 反对

使用道具 举报

107

主题

496

帖子

2270

积分

金牌会员

Rank: 6Rank: 6

积分
2270
QQ
 楼主| 发表于 2014-10-31 16:28:27 | 显示全部楼层
本帖最后由 小小 于 2014-10-31 16:29 编辑
jishuang 发表于 2014-10-31 15:50
到mysql数据库中执行看看,不是这studio中执行


在管理工具里边也不行! DELIMITER $$ , DELIMITER // 都试过了,报的错误一样!不加这个语句也试了,也不行!
创建function23.jpg
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35942
发表于 2014-10-31 17:21:38 | 显示全部楼层
那就是函数写的不对,平台用的mysql是5.0.67标准版本,可以到网上查一下是否有特殊的要求
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

107

主题

496

帖子

2270

积分

金牌会员

Rank: 6Rank: 6

积分
2270
QQ
 楼主| 发表于 2014-11-4 16:16:39 | 显示全部楼层
本帖最后由 小小 于 2014-11-4 16:17 编辑
jishuang 发表于 2014-10-31 17:21
那就是函数写的不对,平台用的mysql是5.0.67标准版本,可以到网上查一下是否有特殊的要求 ...

不是函数写的不对,不知道,你有没有拿着我写的代码测试过!主要原因是数据库没有创建function函数的权限!set global log_bin_trust_function_creators = 1;这句话在要创建函数的数据库中执行一下。function函数创建成功!
咱们平台自带的mysql,在管理工具中,支持的格式如下(前提是必须先确定有没有创建function函数的权限):
  delimiter $$
create  function
     getSignOpinion(
        contractId VARCHAR(36)
    )
         RETURNS VARCHAR(1000)
        BEGIN  
                DECLARE sCountOpin VARCHAR(1000);
                set @rowNumber = 0;
                create TEMPORARY table signOpinGroup(
                contraID varchar(36),
                opinGroup varchar(1024)
        );
        insert into signOpinGroup(contraID,opinGroup)
        SELECT s.fContractID,
                CONCAT(cast(@rowNumber := @rowNumber +1 as

char),'.【', date_format(
                                s.fEnterDate
                                ,'%Y-%m-%d'
                            ), '】:',s.fSignDesc,'\n')         
            FROM
                CO_Contract_SignOpinion s
            WHERE
                s.fContractID = contractId order by
s.fEnterDate asc ;
           select  GROUP_CONCAT(opinGroup   ORDER BY opinGroup asc SEPARATOR '') into  sCountOpin
from signOpinGroup group by contraID;
            DROP TEMPORARY TABLE IF EXISTS signOpinGroup;
         RETURN sCountOpin;
        END
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-19 13:46 , Processed in 0.093595 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表