Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2022, 12:22   #1
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье Ошибка при объявлении переменной

Здравствуйте!
Подскажите, пожалуйста, из--за чего ошибка при объявлении переменной?:

"SQL Error [1064] [42000]: 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 test TEXT;
SET test = 'Постельное белье'' at line 1".

SQLзапрос:
Код:
DECLARE test TEXT;
SET test = 'Постельное белье';

Последний раз редактировалось Женя32; 23.05.2022 в 12:27.
Женя32 вне форума Ответить с цитированием
Старый 23.05.2022, 12:32   #2
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 484
По умолчанию

https://dev.mysql.com/doc/refman/8.0...-variable.html
Valick вне форума Ответить с цитированием
Старый 23.05.2022, 12:41   #3
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Цитата:
Сообщение от Valick Посмотреть сообщение
Я, вроде, все так сделал.... в чем ошибка?
Женя32 вне форума Ответить с цитированием
Старый 23.05.2022, 13:50   #4
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье

Я хочу получить значение поле name по id и, в зависимости от полученного значения, по условию выполнять то или иное действие.
Код:
.....
SET name_catalog = (SELECT name FROM catalog_products WHERE id =  id_catalog); 
  IF name_catalog = 'Постельное белье'
    BEGIN
        -- /////////
    END;
Может лучше (более правильное) есть решение?
Женя32 вне форума Ответить с цитированием
Старый 23.05.2022, 13:51   #5
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 484
По умолчанию

Цитата:
Сообщение от Женя32 Посмотреть сообщение
Я, вроде, все так сделал...
А теперь прочитай мануал еще раз, но на этот раз внимательно.
Цитата:
Сообщение от Женя32 Посмотреть сообщение
Может лучше (более правильное) есть решение?
Конечно есть, не надо использовать переменные и хранимые процедуры.
Не надо работать с декларативным языком SQL по принципам процедурного программирования.
Надо нормализовать архитектуру и данные БД и тогда её величество MySQL отдастся со всеми потрохами на радость программисту.

Последний раз редактировалось Valick; 23.05.2022 в 13:59.
Valick вне форума Ответить с цитированием
Старый 23.05.2022, 13:59   #6
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Цитата:
Сообщение от Valick Посмотреть сообщение
А теперь прочитай мануал еще раз, но на этот раз внимательно.
"
SET применяется к параметрам и локальным переменным в контексте хранимого объекта, в котором они определены. Следующая процедура использует incrementпараметр процедуры и counterлокальную переменную:
".
Получается, создавать переменные можно только в процедуре или функции?
Женя32 вне форума Ответить с цитированием
Старый 23.05.2022, 14:07   #7
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 484
По умолчанию

Ой мама родная... неужели трудно прочитать что-то кроме заголовков.
Цитата:
A user-defined variable is written as @var_name and is assigned an expression value as follows:
и перевод
Цитата:
Определяемая пользователем переменная записывается как @ var _ name и присваивается значение выражения следующим образом:
Куда у тебя подевалась собака?
Код:
SET test = 'Постельное белье'; -> SET @test = 'Постельное белье';
Цитата:
Сообщение от Женя32 Посмотреть сообщение
Получается, создавать переменные можно только в процедуре или функции?
нет, можно и просто так создавать, но в 99% не нужно

Последний раз редактировалось Valick; 23.05.2022 в 14:11.
Valick вне форума Ответить с цитированием
Старый 23.05.2022, 14:24   #8
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье

Цитата:
Сообщение от Valick Посмотреть сообщение
... Куда у тебя подевалась собака? ...
Код:
DECLARE @test TEXT;
SET @test = 'Постельное белье';
Все ровно ошибка:

SQL Error [1064] [42000]: 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 @test TEXT' at line 1

Позиция ошибки:
Женя32 вне форума Ответить с цитированием
Старый 23.05.2022, 14:40   #9
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Во это вообще не нужно писать - DECLARE @test TEXT;? Если я верно понял... Но, по крайней мере, все работает!
Спасибо большое за помощь.
Женя32 вне форума Ответить с цитированием
Старый 24.05.2022, 09:44   #10
olgavv
 
Регистрация: 03.02.2010
Сообщений: 8
По умолчанию

Цитата:
DECLARE @test TEXT;
SET @test = 'Постельное белье';
у меня на этот код другая ошибка: нельзя использовать тип TEXT для локальных переменных,
а вот так:

DECLARE @test VARCHAR(8000);
SET @test = 'Постельное белье';

вполне работает с вашим примером
olgavv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в объявлении функции aank10 Общие вопросы C/C++ 1 09.07.2013 15:00
deque. Ошибка при объявлении итератора 8Observer8 Общие вопросы C/C++ 10 26.01.2013 00:31
Ошибка при объявлении переменных mishev Общие вопросы C/C++ 20 23.08.2012 20:19
Ошибка при объявлении файла записей bogdanidze Помощь студентам 2 13.05.2011 08:26
Ошибка в объявлении переменных Superlotles Помощь студентам 1 17.12.2009 17:05