加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

在MySQL存储函数中声明整数变量时出错

发布时间:2020-12-11 23:33:06 所属栏目:MySql教程 来源:网络整理
导读:尝试在MySQL中声明一个新的存储函数时出现错误(服务器版本:5.5.13) 基本上,我有一个大表,根据它们的起始方式对字符串进行分类.我的函数接受一个字符串(来自用户输入),然后通过在数据库中搜索分类来告诉您该字符串的分类.它有点像LIKE查询,除了反向,因为它是

尝试在MySQL中声明一个新的存储函数时出现错误(服务器版本:5.5.13)

基本上,我有一个大表,根据它们的起始方式对字符串进行分类.我的函数接受一个字符串(来自用户输入),然后通过在数据库中搜索分类来告诉您该字符串的分类.它有点像LIKE查询,除了反向,因为它是包含完整字符串的用户输入,数据库包含要搜索的字符串.希望有道理!

它背后的概念和逻辑运行良好,因为我用PHP编写/开发它并且它??工作得很漂亮,但是当试图将其转换为存储函数时,我从MySQL收到错误.该函数的代码是:

delimiter $

DROP FUNCTION IF EXISTS get_string_class$
CREATE FUNCTION get_string_class(mystring VARCHAR(15))

RETURNS VARCHAR(15)
READS SQL DATA
BEGIN

DECLARE i INT;
SET i = 2;

DECLARE mystringlength INT;
SET mystringlength = LENGTH(mystring);

DECLARE segment VARCHAR(15);
DECLARE String_Class VARCHAR(15);
SET String_Class = NULL;

WHILE i <= mystringlength DO

   SET segment = LEFT(mystring,i);

   SET String_Class = (SELECT String_Class FROM string_class_list WHERE String_Begins = segment);

   IF SELECT FOUND_ROWS() = 1 THEN
      RETURN String_Class
   END IF;

   i = i + 1;

END WHILE;

RETURN String_Class;

END$
delimiter ;

我收到这个错误:

#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 
'DECLARE mystringlength INT; SET mystringlength = LENGTH(mystring);
DECLARE segm' at line 10 

我已经做了很多努力,试图找出我出错的地方.我甚至完全剥离了循环测试它,但仍然得到相同的错误.有谁知道我在宣布INT变量时做错了什么?它可能是非常基本的……!

首先十分感谢.

最佳答案 有一些语法错误 –

其中之一是 – 所有声明都必须在BEGIN … END子句的开头.

DELIMITER $

DROP FUNCTION IF EXISTS get_string_class$
CREATE FUNCTION get_string_class(mystring VARCHAR(15))

RETURNS VARCHAR(15)
READS SQL DATA
BEGIN

DECLARE i INT;
DECLARE segment VARCHAR(15);
DECLARE String_Class VARCHAR(15);
DECLARE mystringlength INT;

SET i = 2;
SET mystringlength = LENGTH(mystring);
SET String_Class = NULL;

WHILE i <= mystringlength DO

   SET segment = LEFT(mystring,i);

   SET String_Class = (SELECT String_Class FROM string_class_list WHERE String_Begins = segment);

   IF (SELECT FOUND_ROWS()) = 1 THEN
      RETURN String_Class;
   END IF;

   SET i = i + 1;

END WHILE;

RETURN String_Class;

END$
DELIMITER ;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读