I’m getting an error when trying to declare a new stored function in MySQL (Server version: 5.5.13)
Basically, I have a large table which classifies strings depending on how they start. My function takes a string (from user input) and then tells you the classification of that string by searching the database for the classification. It’s a bit like a LIKE query, except in reverse as it’s the user input that contains the full string and the database contains the string being searched for. Hope that makes sense!
The concept and logic behind it work fine as I’ve written/developed this in PHP and it works beautifully, however when trying to translate this into a stored function I’m getting an error from MySQL. The code of the function is:
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 ;
I’m getting this error:
#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
I’ve done lots of playing around to trying and work out where I’m going wrong. I’ve even stripped out the loop altogether to test it, but still get the same error. Does anyone know what I’ve done wrong where declaring that INT variable? It’s probably something incredibly basic…!
Thanks very much in advance.
После запуска этого фрагмента кода я столкнулся с следующей ошибкой. Заранее спасибо.
DELIMITER //
BEGIN
DECLARE x INT DEFAULT 0;
DECLARE p1 INT DEFAULT 12;
REPEAT SET x = x + 1; UNTIL x > p1 END REPEAT;
END//
DELIMITER;
Производит синтаксическую ошибку:
# 1064 — У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для> правильного синтаксиса для использования рядом с ‘DECLARE x int default 0;
Поделиться
Источник
2 ответа
Вам необходимо временно изменить разделитель, чтобы клиент MySQL не думал, что вы закончили с вашим выражением, когда он видит точку с запятой в строке 3.
DELIMITER //
BEGIN
DECLARE x INT DEFAULT 0;
DECLARE p1 INT DEFAULT 12;
REPEAT SET x = x + 1; UNTIL x > p1 END REPEAT;
END//
DELIMITER ;
Над кодом должен работать должным образом.
Andrew Naguib
Поделиться
Пытаться:
DELIMITER //
DROP PROCEDURE IF EXISTS 'sp_test';
CREATE PROCEDURE 'sp_test'()
BEGIN
DECLARE 'x' INT DEFAULT 0;
DECLARE 'p1' INT DEFAULT 12;
REPEAT
SET 'x' := 'x' + 1;
UNTIL 'x' > 'p1' END REPEAT;
SELECT 'x';
END//
DELIMITER ;
CALL 'sp_test';
wchiquito
Поделиться
Ещё вопросы
- 1String.split, преобразование строк в int
- 1Как вы печатаете сообщение об ошибке при попытке ввести отрицательное значение в массив?
- 0Как вернуть слово с заглавной первой буквой
- 0Chrome не отражает css на моем компьютере, но другие хромы работают правильно
- 0какой тип содержимого установить, если содержимое страницы содержит смесь php, html, css и javascript / jquery… и расширение файла было php?
- 1Метод поиска инъекций в Spring
- 0Пароль типа предоставления Symfony2 FOSOAuthServerBundle требует секрет клиента
- 0Yii — Css — один активный эффект для нескольких ссылок
- 1Как разделить макет на 3 вида
- 0Запутанная таблица CSS
- 0Вызовите PHP с JavaScript
- 0jQuery jeditable Не удается прочитать свойство «плагин» неопределенного при попытке использовать datetimepicker
- 1SVG `<path>` Неточность
- 1Поиск нескольких атрибутов в Монго с Метеором
- 1Динамический запрос crm rest builder для отношения многих ко многим
- 0Выпадающее меню не отображается в Safari 6
- 1OpenCV / Python — Найти угловые координаты прямоугольника с рисунком в оттенках серого по серому изображению?
- 0Инициализировать не копируемый сторонний базовый класс с указателем на объект
- 1Передача текста и значения в ComboBox
- 0Показать окно сообщения о блокировке
- 1Невозможно выбрать опцию в выпадающем списке селен
- 0Как скрыть URL при печати страницы с помощью JavaScript или JQuery
- 0Ошибка запуска Kinect Facetracking C ++
- 0элемент стиля html, за которым следует определенный класс
- 0Используйте поиск с атрибутом данных
- 0cpp удаляет старый указатель и повторно инициализирует его
- 1Почему .cfg не может быть переписан, но вместо этого создан новый файл?
- 0Javascript — множественный класс. Как я могу отличить, какой из них был нажат?
- 0JQuery, нажмите, чтобы увеличить изображение, затем нажмите Agian, чтобы вернуться к предыдущей ширине
- 0Карты Google — Использование Заменить
- 1Веб-анализ Python с запросами — после входа в систему
- 1Определение владельца, к которому принадлежит пользователь в ASP.NET
- 1Как конвертировать дату в метку времени
- 0C ++ Проверка правильности ввода, чтобы убедиться, что вместо буквы был введен номер
- 0Данные таблицы HTML смещаются в другие столбцы
- 0Динамический CSS углового класса
- 0как передать max_streak_length из командной строки
- 1Фрагменты ConstraintLayout вырезаны в FrameLayout активности
- 1Как получить значения translate3d?
- 1Рассечение объекта с помощью метода __getattr__ в Python возвращает `TypeError, объект не может быть вызван`
- 1удаление текста контура круговой диаграммы
- 0о removeClass из родительского элемента
- 0Преобразование координат SVG в координаты карты изображения HTML
- 1Привязать сетку данных к списку ObservableCollection
- 2Ошибка слияния манифеста: Атрибут application @ appComponentFactory — Androidx
- 0Экспресс не получает данные от angularjs
- 0Снимите флажок HTML с меткой
- 1OnApplyWindowInsetsListener дает systemWindowInsetBottom, который всегда равен 0
- 0jQuery Week Calendar без перекрывающихся событий
- 1Чтение геометрии Postgres в байт [] с помощью спящего режима?
I am just moving to some PostgreSQL from MS-SQL and have checked numerous pages on how to use variables in a script but am getting nowhere
Within pg-admin I have my database and have a new script. I have stripped the SQL right back to a single line as follows:
DECLARE v_syncId integer;
Running this script gives me:
ERROR: syntax error at or near "integer" LINE 1: DECLARE v_syncId integer; ^ SQL state: 42601 Character: 18
I am obviously doing something wrong here but can’t see what
What I have tried:
I have tried setting default values but no luck (same error)
DECLARE v_syncId integer DEFAULT 50;
DECLARE v_syncId integer = 50;
Both give the same error
I have tried other data types:
DECLARE v_syncId VARCHAR;
and also same result.
Any references here would be appreciated.
Solution 1
There were some syntax errors —
One of them is — all declarations must be at the begining of the BEGIN…END clause.
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 ;
Solution 2
DECLARE
part inside stored procedure must be at top and SET
and other statemnts starts after that.
Related videos on Youtube
14 : 37
Lưu ý khi viết Stored Procedure, Function, Trigger…
45 : 08
MySQL DBA Tutorial | Stored Routines and Cursors in MySQL | MySQL Stored Functions
06 : 24
Learning MySQL — Stored Functions
Steve Griffith — Prof3ssorSt3v3
10 : 31
MySQL Stored Procedure Beginners Tutorial #4-Variables & Parameters | Variables Detailed — Procedure
07 : 02
Error Handling using Stored procedure in Mysql 8
36 : 48
MySQL — Stored Functions Introduction
17 : 31
How to Create a Stored Function mySQL [ English ]
01 : 12
MySql calling stored function from within a stored procedure causing error — MySQL
01 : 26
Error declaring integer variable inside MySQL stored function — MySQL
Comments
-
I’m getting an error when trying to declare a new stored function in MySQL (Server version: 5.5.13)
Basically, I have a large table which classifies strings depending on how they start. My function takes a string (from user input) and then tells you the classification of that string by searching the database for the classification. It’s a bit like a LIKE query, except in reverse as it’s the user input that contains the full string and the database contains the string being searched for. Hope that makes sense!
The concept and logic behind it work fine as I’ve written/developed this in PHP and it works beautifully, however when trying to translate this into a stored function I’m getting an error from MySQL. The code of the function is:
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 ;
I’m getting this error:
#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
I’ve done lots of playing around to trying and work out where I’m going wrong. I’ve even stripped out the loop altogether to test it, but still get the same error. Does anyone know what I’ve done wrong where declaring that INT variable? It’s probably something incredibly basic…!
Thanks very much in advance.
Recents
Related
Issue
Declare variable syntax error in MySQL Workbench? the code is ok but the error is on DECLARE cod int;
CREATE PROCEDURE sp_insertarPro(
nom varchar(100),
pre decimal(18, 2),
img varchar(100)
)
DECLARE cod int;
SELECT IFNULL(MAX(codigoProducto),0)+1 into cod FROM producto;
INSERT INTO producto VALUES (cod,nom,pre,img);
ERROR:
create procedure sp_insertarPro(nom varchar(100),pre decimal(18, 2),img varchar(100)) declare cod int
Error Code: 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 cod int' at line 7
Solution
Try this:
DELIMITER $$
CREATE PROCEDURE sp_insertarPro(
nom varchar(100),
pre decimal(18, 2),
img varchar(100)
)
BEGIN
DECLARE cod int;
SELECT IFNULL(MAX(codigoProducto),0)+1 into cod FROM producto;
INSERT INTO producto VALUES (cod,nom,pre,img);
END $$
DELIMITER ;
Answered By – Olavo Mello
This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0