powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / DECLARE - объясните синтаксис
11 сообщений из 11, страница 1 из 1
DECLARE - объясните синтаксис
    #36548888
Фотография Max Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

SELECT VERSION(); → 5.0.67-community-nt
При декларации переменных Query Browser выдаёт ошибку.
Например, пишу:
Код: plaintext
1.
2.
DECLARE @int1 Int;
DECLARE @int2 Int;
До этого фигачил на sql-server (Microsoft), теперь пытаюсь перейти на MySQL.
В выходные глянул книжку, но детально пока не вникнул. Вроде должно работать.
Спросил других программеров. Один сказал, что в MySQL есть DECLARE, но нельзя «а коммерческое @» писать.
Убрал. Такая же ошибка примерно.
Другой почесал в затылке, сказал, что DECLARE можно использовать, но только в хранимых процедурах.
А у меня-то не хранимая процедура, а транзакция вида
Код: plaintext
1.
2.
START TRANSACTION;
................
COMMIT;
Попробовал вывести DECLARE за пределы транзакции ― не помогло.
Спросил ещё раз. Сказали, что «а коммерческое @» писать наоборот надо. Вернул. Опять ошибка.
Ещё раз спросил. Сказали, что вместо DECLARE в MySQL надо использовать SET.
Написал тогда так:
Код: plaintext
1.
2.
SET @int1= 0 ;
SET @int2= 0 ;
Всё, после этого заработало.
Теперь пожалуйста, сообщите мне, дураку, так работает DECLARE или нет. И если вместо него SET, то
как ему передать тип данных: Int,BigInt,Char,VarChar и так дадее?
...
Рейтинг: 0 / 0
DECLARE - объясните синтаксис
    #36548941
Byterus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Max Pro,

авторDECLARE можно использовать, но только в хранимых процедурах ,функциях, тригерах и евентах :)
...
Рейтинг: 0 / 0
DECLARE - объясните синтаксис
    #36549329
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max Pro,


Да, "@" перед именем локальной переменной указывать нельзя.

Переменные, начинающиеся на "@" являются чем-то вроде переменных окружения для MySQL. Они могут быть глобальными для сервера или локализованы в рамках текущей сессии.
Иногда без таких переменных обойтись нельзя (в случае dynamic sql). Объявлять их не нужно. Типа они не имеют (хранят любой текст).


автор
Код: plaintext
1.
2.
START TRANSACTION;
................
COMMIT;


Полагаю, что вы имеете в виду анонимную процедуру. В MySQL их нет - только обычные, с именем. Все, что выходит за рамки SQL-операторов, должно быть реализовано в процедуре.
...
Рейтинг: 0 / 0
DECLARE - объясните синтаксис
    #36549336
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max Pro,

Чтобы было проще, пример использования локальных переменных:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE test(p_param1 INT)
BEGIN
  DECLARE var1 INT;
  DECLARE var2 VARCHAR( 100 );

  SET var1 =  10 ;

  SELECT t1.subj INTO var2 FROM tab1 t1 WHERE t1.id = p_param1;
END;

Внимание! В SQL-операторах внутри процедур, при конфликте имен, переменные имеют приоритет над полями таблиц. По этому стоит пользоваться псевдонимами.
...
Рейтинг: 0 / 0
DECLARE - объясните синтаксис
    #36549556
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RXLВнимание! В SQL-операторах внутри процедур, при конфликте имен, переменные имеют приоритет над полями таблиц. По этому стоит пользоваться псевдонимами.
Кроме того локальные переменные имеют приоритет над параметрами процедуры, а параметры процедуры в свою очередь над полями таблиц.
Иллюстрирующий пример http://sqlinfo.ru/forum/viewtopic.php?pid=2513#p2513

To Max Pro,
в начале указанной по ссылке теме рассматриваются пользовательские переменные, те которые начинаются на @

RXLПеременные, начинающиеся на "@" являются чем-то вроде переменных окружения для MySQL. Они могут быть глобальными для сервера или локализованы в рамках текущей сессии.
Пользовательские переменные, начинающиеся на "@" локализованы в рамках текущей сессии (глобальными быть не могут).
Глобальными являются системные переменные, начинающиеся на "@@".

Хотя нельзя сказать, что системные переменные не начинаются на "@"
...
Рейтинг: 0 / 0
DECLARE - объясните синтаксис
    #36549809
Фотография Max Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, буду дальше разбираться. Перешли на MySQL в надежде на бесплатность. Какого же было удивление, когда оказалось, что для коммерческих разработок надо покупать лицензию. Я фигею, похоже MySQL далеко не идеал. Хотя теперь делать нечего, надо изучать и использовать.
...
Рейтинг: 0 / 0
DECLARE - объясните синтаксис
    #36549874
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max Pro,

www.mysql.com
MySQL Software is provided under the GPL License.

OEMs, ISVs and VARs can purchase commercial licenses.


Как видите, если интеграция с вашим ПО не противоречит GPL, то необходимости покупать лицензию нет. Конечно, если вы используете Community Edition.
...
Рейтинг: 0 / 0
DECLARE - объясните синтаксис
    #36550630
Фотография Max Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RXLMax Pro,

www.mysql.com
MySQL Software is provided under the GPL License.

OEMs, ISVs and VARs can purchase commercial licenses.


Как видите, если интеграция с вашим ПО не противоречит GPL, то необходимости покупать лицензию нет. Конечно, если вы используете Community Edition.
цитата из книги «Самоучитель MySQL 5 Максим Кузнецов,Игорь Семдянов»Особенностью лицензии GPL является тот факт, что любой код, скомпилированный с GPL-кодом, попадает под GPL-лицензию, т.е. может свободно распространяться, и условием его распространения является предоставление исходных кодов. MySQL AB придерживается двойного лицензирования, позволяя пользователям бесплатно использовать СУБД MySQL под GPL-лицензией, а также предоставляет MySQL под коммерческой лицензией тем, кому необходимо использовать его в коммерческих целях, например в составе программы.
Тут не совсем понятно словосочетание "скомпилированный с GPL-кодом", например, если программа не содержит исходных кодов MySQL, но содержит строку подключения к MySQL и драйвер провайдера, то считается, что она скомпилирована с GPL-кодом или нет. Это непонятно, но даётся намёк на то, что все коммерческие программы (да и не коммерческие), в том числе вэб-сайты, которые не содержат естественно ссылок на свои исходники, должны иметь покупную лицензию MySQL. Но если опубликовать исходники, то покупная лицензия не нужна. Естественно никто публиковать исходники особо желанием не горит, поэтому надо раскошеливаться.
...
Рейтинг: 0 / 0
DECLARE - объясните синтаксис
    #36554026
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max Pro,

Вопрос спорный. С MySQL по коду вы никак не пересекаетесь, т.к. не используете исходный код MySQL в своей программе, а только заголовочные файлы и динамически подключаете библиотеку.

Если бы использование GPL-библиотеки приводило бы к обязательному переходу проекта под GPL, то Linux, FreeBSD, Solaris и многие другие ОС состояли бы исключительно из GPL-программ. На деле же программа может быть под любой лицензией, даже коммерческой.

Если очень хочется все же "прикрыть задницу", то есть стандартный выход: библиотека-обертка.
Создается библиотека-обертка, тупо транслирующая вызовы к библиотеке MySQL один в один. Ничего сверхсекретного в ней нет - почему бы не выложить ее исходники? А сами используйте ее, динамически подключая к своей программе.
...
Рейтинг: 0 / 0
DECLARE - объясните синтаксис
    #36554242
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max Pro,
MySQL не требует лицензии, если вы используете в разработке продукты под FOSS-лицензиями (см.полный список).
Apache+PHP (там еще много в списке) подходит в этом случае.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
DECLARE - объясните синтаксис
    #39393875
Mimokrokodil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Max ProПерешли на MySQL в надежде на бесплатность. Какого же было удивление, когда оказалось, что для коммерческих разработок надо покупать лицензию.
Если прижмёт, есть постгри (PostgreeSQL). Там уж точно не заставят платить. Да ещё и производительность в довесок. Да не обругают меня любители MySQL.
ЗЫ. На будущее. Для инициализации переменных есть ключевое слово DEFAULT. Например:
Код: sql
1.
declare i int default 0; -- Теперь у нас есть переменная i со значением '0'.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / DECLARE - объясните синтаксис
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]