У меня проблемы с преобразованием хранимой процедуры из Firebird в MySQL.
Вот мой существующий код из Firebird:
CREATE OR ALTER PROCEDURE GET_EOMONTH (
selectmonth integer,
selectyear integer)
returns (
lastdate timestamp)
as
declare variable vmonth integer;
declare variable vyear integer;
begin
VMONTH = selectmonth+1;
VYEAR = selectyear;
if (VMONTH=13) then
BEGIN
vmonth = 1;
vyear = selectyear + 1;
END
LASTDATE = CAST(VMONTH || '/1/' || VYEAR AS DATE) - 1;
/* Procedure Text */
suspend;
end^
Затем я изменяю код выше:
CREATE PROCEDURE GET_EOMONTH (
selectmonth integer,
selectyear integer)
returns (
lastdate timestamp)
as
declare variable vmonth integer;
declare variable vyear integer;
begin
VMONTH = selectmonth+1;
VYEAR = selectyear;
if (VMONTH=13) then
BEGIN
vmonth = 1;
vyear = selectyear + 1;
END
LASTDATE = CAST(VMONTH || '/1/' || VYEAR AS DATE) - 1;
/* Procedure Text */
suspend;
end
Из приведенного выше кода я получил следующие ошибки:
У вас ошибка в синтаксисе SQL; проверьте руководство, которое
соответствует вашей версии сервера MySQL для правильного использования синтаксиса
возле '(
отметка времени последней даты) as объявляет переменную vmonth integer 'в строке 4 * /
- отредактированный
Я снова изменил это:
DELIMITER $$
CREATE PROCEDURE GET_EOMONTH (
IN selectmonth INT,
IN selectyear INT,
OUT LASTDATE VARCHAR(100))
BEGIN
DECLARE VMONTH INT;
DECLARE VYEAR INT;
SET VMONTH = selectmonth+1;
SET VYEAR = selectyear;
IF (VMONTH=13) THEN
BEGIN
SET VMONTH = 1;
SET VYEAR = selectyear + 1;
END;
END IF;
SET LASTDATE = CAST(VMONTH || '/1/' || VYEAR AS DATE) - 1;
SELECT @LASTDATE;
END
END$$
но ошибка говорит:
Ошибка SQL (1064): в синтаксисе SQL есть ошибка; проверить
руководство, которое соответствует вашей версии сервера MySQL для права
синтаксис для использования около 'END' в строке 19
Пожалуйста, совет.
- отредактированный
Теперь я модифицирую код следующим образом:
DELIMITER $$
CREATE PROCEDURE GET_EOMONTH (
IN selectmonth INT,
IN selectyear INT,
OUT LASTDATE VARCHAR(100))
BEGIN
DECLARE VMONTH INT;
DECLARE VYEAR INT;
SET VMONTH = selectmonth+1;
SET VYEAR = selectyear;
IF (VMONTH=13) THEN
BEGIN
SET VMONTH = 1;
SET VYEAR = selectyear + 1;
END;
END IF;
SET LASTDATE = str_to_date(CONCAT(VYEAR, "-", VMONTH, "-1"), '%y/%m/%d') -1;
SELECT @LASTDATE;
END$$
DELIMITER ;
И это работает.