navicat不能创建函数解决方法分享

第一次写MySQL FUNCTION,一直报错,

Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`company_id` int) RETURNS varchar(20) CHARSET utf8

BEGIN

本来的函数:

CREATE DEFINER=`33323`@`%` FUNCTION `createSaleCode`(`benginStr` varchar,`company_id` int) RETURNS varchar(20) CHARSET utf8
BEGIN
  DECLARE nearnum VARCHAR(20);
 DECLARE nowdatepre VARCHAR(20);
 DECLARE numout VARCHAR(20);
 SELECT a.sale_code INTO nearnum FROM d_sale a WHERE a.company_id = company_id ORDER BY a.sale_id DESC limit 1;
 SELECT concat(extract(year_month from now()),LPAD(extract(day from now()), 2, 0)) INTO nowdatepre;
 IF locate(nowdatepre,nearnum)>0
  THEN
    set numout = nearnum +1;
  ELSE
    set numout = concat(beginStr,nowdatepre,'00001');
  END IF;
 RETURN numout;
END 

这段函数在Navicat上边执行不起来,在多次尝试之后将代码修改为以下:

delimiter $$
CREATE DEFINER=`12212`@`%` FUNCTION createSaleCode(benginStr varchar(20),company_id int(11) ) RETURNS varchar(20) CHARSET utf8
BEGIN
  DECLARE nearnum VARCHAR(20);
 DECLARE nowdatepre VARCHAR(20);
 DECLARE numout VARCHAR(20);
 SELECT a.sale_code INTO nearnum FROM d_sale a WHERE a.company_id = company_id ORDER BY a.sale_id DESC limit 1;
 SELECT concat(extract(year_month from now()),LPAD(extract(day from now()), 2, 0)) INTO nowdatepre;
 IF locate(nowdatepre,nearnum)>0
  THEN
    set numout = nearnum +1;
  ELSE
    set numout = concat(beginStr,nowdatepre,'00001');
  END IF;
 RETURN numout;
END$$
delimiter ; 

问题解决。

默认情况下,delimiter是分号;。

总结

以上就是本文关于navicat不能创建函数解决方法分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:简述Redis和MySQL的区别、MYSQL子查询和嵌套查询优化实例解析、几个比较重要的MySQL变量等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!

(0)

相关推荐

  • 使用navicat 8实现创建数据库和导入数据 管理用户与权限[图文方法]

    下面看图使用该工具创建数据库和导入数据.navicat 8 下载地址 1 2 3 4 5 6 7 8 9 10 11 12.教程完毕. 2,管理建立用户和分配用户权限 在这里,我们可以发现root是MySQL最高级别权限的用户,它拥有查看.修改和删除MySQL软件中所有数据库的权限.当需要有多个数据库,并且分配给不同的用户使用,多个用户之间只有查看自己对应数据库的权限,不相互干扰,那么需要怎么做呢? 答案很简单,建立多个数据库和用户,给用户设置管理指定数据库的权限.操作方法如下: 鼠标右键点击"

  • navicat 8 创建数据库与创建用户分配权限图文方法

    下面是我们需要创建一个数据与一个用户的方法,图文操作的原理跟命令行原理是一样的. navicat 8 精简版(7M) MYSQL图像管理工具 V8.0.28第一步.先连接mysql如果出现连接不了的情况,一般是mysql数据库没有启动,或密码不正确.大家可以解决下. 第二步.先创建一个数据库 jb51 第三步:输入jb51,下面是默认的字符,一般情况下gbk默认就可以.如果是utf8的最好选择想对应的字符,防止乱码的出现.第四步:新建一个用户jb51user,先点击管理用户,点击添加用户第五步:

  • navicat中创建存储过程、触发器和使用游标的简单实例(图文)

    1.建表 首先先建两张表(users表和number表),具体设计如下图: 2.存储过程 写一个存储过程,往users表中插入数据,创建过程如下: 代码如下 BEGIN #Routine body goes here... declare n bigint; set n = 201121029684; while n <= 201121029694 do insert into users(student_ID) values(n); set n = n + 1; end while; END

  • navicat不能创建函数解决方法分享

    第一次写MySQL FUNCTION,一直报错, Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`company_id` int) RETURNS varchar(20) CHARSET utf8 BEGIN 本来的函数: CREATE DEFINER

  • php运行时动态创建函数的方法

    本文实例讲述了php运行时动态创建函数的方法.分享给大家供大家参考.具体分析如下: 一般的语言函数必须定义了在运行,而php支持在运行时动态创建函数,下面是一个简单的范例,在运动时根据不同的条件创建函数$a <?php if (count($_POST) > 0) { $prepped = create_function('$a', 'return trim($_POST[$a]);'); } elseif (count($_GET) > 0) { $prepped = create_f

  • php从字符串创建函数的方法

    本文实例讲述了php从字符串创建函数的方法.分享给大家供大家参考.具体如下: php中可以把整个函数定义放到一个字符串内动态定义,有了create_function这个函数,你就可以根据用户输入动态创建函数了,非常方便,create_function使用方法如范例所示: 复制代码 代码如下: <?php $lambda =create_function('$a,$b','return(strlen($a)-strlen($b));'); $array = array('really long s

  • MySQL中隐式转换的踩坑记录以及解决方法分享

    目录 复现当时的情景 根源所在 隐式转换的规则 避免进行隐式转换 本来是一个平静而美好的下午,其他部门的同事要一份数据报表临时汇报使用,因为系统目前没有这个维度的功能,所以需要写个SQL马上出一下,一个同事接到这个任务,于是开始在测试环境拼装这条 SQL,刚过了几分钟,同事已经自信的写好了这条SQL,于是拿给DBA,到线上跑一下,用客户端工具导出Excel 就好了,毕竟是临时方案嘛. 就在SQL执行了之后,意外发生了,先是等了一下,发现还没执行成功,猜测可能是数据量大的原因,但是随着时间滴滴答答

  • Spring MVC参数传递中文乱码解决方法分享

    概述 中国特色社会主义乱码问题是我们经常会碰到的问题,解决的办法有很多,本文分别介绍了GET方式和POST方式中文乱码解决方案中一劳永逸的办法. GET提交中文乱码解决方案 在乱码的Controller文件中采用下面的方法将编码转换成UTF-8 String str = new String(request.getParameter("参数名").getBytes("iso-8859-1"), "utf-8"); 修改项目所在的Tomcat服务器

  • SQL Server常见问题及解决方法分享

    写在前面 在QQ群,微信群,论坛中经常帮助使用SQL Server数据库的朋友解决问题,但是有一些最常见最基本的问题,每天都有人问,回答多了也不想再解答了,索性把这些问题整理一下,再有人问到直接发链接. 一时想法而写这篇文章,问题可能不全面,后续会一直更新. 基础问题收集资源下载 描述:XX版本数据库操作系统在哪里下载? 答:http://www.itellyou.cn/ 里面很多东西,有兴趣的自己看吧 连接问题 描述:数据库连接不上 答:请确认SQL服务是否启动,用户密码是否正确,连接的实例名

  • SQLSERVER启动不起来(错误9003)的解决方法分享

    先说一下环境 客户环境:Windows2003企业版SP2 32位 SQL2005企业版 32位 SP4自己笔记本电脑环境:Windows7 SP1  32位  SQL2005个人开发者版 32位我的笔记本电脑的计算机名:joe客户电脑的计算机名:hs 客户那边的master数据库大小:几MB业务系统是winform系统客户的环境是单机系统没有使用到域网络环境:客户那边的网速比较慢,用远程协助的时候比较卡为什麽要说明我自己笔记本电脑的环境呢?请大家继续耐心看下去 检查 先打开SQLSERVER配

  • PL/SQL Dev连接Oracle弹出空白提示框的解决方法分享

    没办法,只能自己研究,经过大概一天时间吧,还是搞好了,写个总结. 出现这种问题,解决方法大概有这几种: 1.权限不够,导致弹出空吧提示框.(直接上链接) http://jingyan.baidu.com/article/066074d6760959c3c21cb0d6.html 就PL/SQL图标上点右键---属性---兼容性--管理员身份运行此程序的勾打上,即可 2.环境变量没设对. ①在安装oracle服务器的机器上搜索下列文件,oci.dllocijdbc10.dll(其中10代表orac

  • thinkphp3查询mssql数据库乱码解决方法分享

    thinkphp查询mssql数据库出现乱码的原因是ThinkPHP默认为UTF-8,而msmsql数据库是简体中文版,存储的是GB2312编码 解决方法: 1:在ThinkPHP\Lib\Core 打开Db.class.php,在其最后面加上2:在Db.class.php找到function select(),在$result = $this->query($sql);后面加一条 $result=iconv2utf8($result),就OK了 复制代码 代码如下: public functi

  • mysql 双向同步的键值冲突问题的解决方法分享

    出现的问题(多主自增长ID重复) 1:首先我们通过A,B的test表结构 2:掉A,在B上对数据表test(存在自增长ID)执行插入操作,返回插入ID为1 3:后停掉B,在A上对数据表test(存在自增长ID)执行插入操作,返回的插入ID也是1 4:然后 我们同时启动A,B,就会出现主键ID重复 解决方法: 我们只要保证两台服务器上插入的自增长数据不同就可以了 如:A查奇数ID,B插偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了 在这里我们在A,B上加入参数,以实现奇偶插入 A

随机推荐