Declare int ошибка

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 в байт [] с помощью спящего режима?

Сообщество Overcoder

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

Lưu ý khi viết Stored Procedure, Function, Trigger…

14 : 37

Lưu ý khi viết Stored Procedure, Function, Trigger…

MySQL DBA Tutorial | Stored Routines and Cursors in MySQL | MySQL Stored Functions

45 : 08

MySQL DBA Tutorial | Stored Routines and Cursors in MySQL | MySQL Stored Functions

Learning MySQL - Stored Functions

06 : 24

Learning MySQL — Stored Functions

Steve Griffith — Prof3ssorSt3v3

MySQL Stored Procedure Beginners Tutorial #4-Variables & Parameters | Variables Detailed - Procedure

10 : 31

MySQL Stored Procedure Beginners Tutorial #4-Variables & Parameters | Variables Detailed — Procedure

Error Handling using Stored procedure in Mysql 8

07 : 02

Error Handling using Stored procedure in Mysql 8

MySQL - Stored Functions Introduction

36 : 48

MySQL — Stored Functions Introduction

How to Create a Stored Function mySQL [ English ]

17 : 31

How to Create a Stored Function mySQL [ English ]

MySql calling stored function from within a stored procedure causing error - MySQL

01 : 12

MySql calling stored function from within a stored procedure causing error — MySQL

Error declaring integer variable inside MySQL stored function - 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

Понравилась статья? Поделить с друзьями:
  • Declaration or statement expected javascript ошибка
  • Deceit код ошибки 30005
  • Debugmsg dll ошибка
  • Debian проверка диска на ошибки при загрузке
  • Debug error c abort has been called ошибка