Полностью вопрос звучит так: Как правильно написать хранимую процедуру в MySQL, внутри которой есть блок IF THEN ELSE, что бы этот скрипт затем можно было выполнять из разных сред без синтаксических ошибок?
Я поясню…
SQL-скрипт можно выполнить разными способами:
- из командной строки;
- из специальных GUI-тулз, вроде MySQL Administrator или MySQL Query Browser;
- из интегрированных сред, вроде IntelliJ IDEA...
- etc.
Пишешь обычную процедуру, и все прекрасно работает и выполняется. Особых проблем нет.
Но как только внутри процедуры объявляется блок IF THEN ELSE сразу начинаются проблемы…
Где-то приходится сперва задавать разделитель (DELIMITER $$) и только так этот скрипт будет принят и выпонен.
Кто-то, например MySQL Administator из MySQL GUI Tools, наоборот его не принимает.
Ему нужна только сама процедура…
А в IDE IntelliJ IDEA, например, при попытке запуска хранимой внутри которой есть IF THEN ELSE, что с DELIMITER $$, что без него… вообще никак не работает!
DROP PROCEDURE IF EXISTS p;
DELIMITER $$
CREATE PROCEDURE p(IN Number INT)
BEGIN
IF NUMBER = 1 THEN
SELECT * FROM tblProduct WHERE ProductID = Number;
ELSE
SELECT * FROM tblProduct WHERE ProductId = 2;
END IF;
END $$
DELIMITER ;
[42000][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 'DELIMITER $$
<...>
и
CREATE PROCEDURE p(IN Number INT)
BEGIN
IF NUMBER = 1 THEN
SELECT * FROM tblProduct WHERE ProductID = Number;
ELSE
SELECT * FROM tblProduct WHERE ProductId = 2;
END IF;
END;
[42000][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 '' at line 4
ELSE
<...>
Как, вообще, процедуры пишутся в MySQL?
ЗЫЖ Сорри, может сумбурно написал, но что-то вот не понятно мне, как такое может быть что бы синтаксис процедуры мог не выполняться в какой-либо среде. В голове каша.
UPD: Похоже, что я понял, в чем дело. JDBC не поддерживает DELIMITER