firebird到mysql的过程

pb3skfrl  于 2021-06-25  发布在  Mysql
关注(0)|答案(0)|浏览(229)

我无法将存储过程从firebird转换为mysql。
以下是firebird的现有代码:

  1. CREATE OR ALTER PROCEDURE GET_EOMONTH (
  2. selectmonth integer,
  3. selectyear integer)
  4. returns (
  5. lastdate timestamp)
  6. as
  7. declare variable vmonth integer;
  8. declare variable vyear integer;
  9. begin
  10. VMONTH = selectmonth+1;
  11. VYEAR = selectyear;
  12. if (VMONTH=13) then
  13. BEGIN
  14. vmonth = 1;
  15. vyear = selectyear + 1;
  16. END
  17. LASTDATE = CAST(VMONTH || '/1/' || VYEAR AS DATE) - 1;
  18. /* Procedure Text */
  19. suspend;
  20. end^

然后我将上面的代码修改为:

  1. CREATE PROCEDURE GET_EOMONTH (
  2. selectmonth integer,
  3. selectyear integer)
  4. returns (
  5. lastdate timestamp)
  6. as
  7. declare variable vmonth integer;
  8. declare variable vyear integer;
  9. begin
  10. VMONTH = selectmonth+1;
  11. VYEAR = selectyear;
  12. if (VMONTH=13) then
  13. BEGIN
  14. vmonth = 1;
  15. vyear = selectyear + 1;
  16. END
  17. LASTDATE = CAST(VMONTH || '/1/' || VYEAR AS DATE) - 1;
  18. /* Procedure Text */
  19. suspend;
  20. end

从上面的代码中,我得到如下错误:
sql语法有错误;检查与mysql服务器版本对应的手册,以获得正确的语法,将near'(lastdate timestamp)用作第4行的declare variable vmonth integer'*/
--编辑
我又修改了一下:

  1. DELIMITER $$
  2. CREATE PROCEDURE GET_EOMONTH (
  3. IN selectmonth INT,
  4. IN selectyear INT,
  5. OUT LASTDATE VARCHAR(100))
  6. BEGIN
  7. DECLARE VMONTH INT;
  8. DECLARE VYEAR INT;
  9. SET VMONTH = selectmonth+1;
  10. SET VYEAR = selectyear;
  11. IF (VMONTH=13) THEN
  12. BEGIN
  13. SET VMONTH = 1;
  14. SET VYEAR = selectyear + 1;
  15. END;
  16. END IF;
  17. SET LASTDATE = CAST(VMONTH || '/1/' || VYEAR AS DATE) - 1;
  18. SELECT @LASTDATE;
  19. END
  20. END$$

但是,错误是:
sql错误(1064):您的sql语法有错误;检查与mysql服务器版本相对应的手册,以获得第19行“end”附近使用的正确语法
请给我建议。
--编辑
现在我修改代码如下:

  1. DELIMITER $$
  2. CREATE PROCEDURE GET_EOMONTH (
  3. IN selectmonth INT,
  4. IN selectyear INT,
  5. OUT LASTDATE VARCHAR(100))
  6. BEGIN
  7. DECLARE VMONTH INT;
  8. DECLARE VYEAR INT;
  9. SET VMONTH = selectmonth+1;
  10. SET VYEAR = selectyear;
  11. IF (VMONTH=13) THEN
  12. BEGIN
  13. SET VMONTH = 1;
  14. SET VYEAR = selectyear + 1;
  15. END;
  16. END IF;
  17. SET LASTDATE = str_to_date(CONCAT(VYEAR, "-", VMONTH, "-1"), '%y/%m/%d') -1;
  18. SELECT @LASTDATE;
  19. END$$
  20. DELIMITER ;

而且很有效。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题