процедура firebird для mysql - PullRequest
0 голосов
/ 09 мая 2018

У меня проблемы с преобразованием хранимой процедуры из 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 ;

И это работает.

...