programing

SQL Server 스토어드 프로시저를 MySQL(MariaDB)로 다시 쓰기

newsource 2023. 1. 30. 22:01

SQL Server 스토어드 프로시저를 MySQL(MariaDB)로 다시 쓰기

MS SQL Server 구문을 MariaDB standart의 MySQL로 저장 프로시저를 다시 작성해야 합니다.난 몇 시간 동안 이것과 씨름하고 있다.이렇게 많은 차이가 있을 줄은 상상도 못했어요.자동으로 할 수 있는 툴이 있나요?다음은 저장 프로시저의 코드입니다.

CREATE PROCEDURE sp_Validate @username nvarchar(50), @email nvarchar(100) = NULL
AS
BEGIN
SELECT * INTO #tmp FROM Users WHERE Username = @username

IF((SELECT COUNT(*) FROM #tmp) < 1)
    BEGIN               
        INSERT INTO Users(Username, Email, FirstLaunch) VALUES (@username, @email, GETDATE())
        SELECT 1
    END
ELSE IF(DATEDIFF(DAY, GETDATE(), (SELECT FirstLaunch FROM #tmp)) > 8)
    BEGIN
        UPDATE Users SET Email = @email WHERE Username = @username
        SELECT 0
    END
ELSE
    BEGIN
        UPDATE Users SET Email = @email WHERE Username = @username
        SELECT 1
    END

IF OBJECT_ID('#tmp') IS NOT NULL  
    DROP TABLE #tmp
END

사용자가 [Users]테이블 내에 존재하는지, 사용자가 처음 로그인한 지 7일이 넘었는지 확인합니다.

저장 프로시저 언어의 구현은 서로 다릅니다.MS SQL Server 언어(Transact-SQL)는 원래 Sybase에 의해 개발되었습니다.MySQL 사투리가 좀 달라요.고객의 구속은 아니고, 시간이 지남에 따라 진화해 왔습니다.

MySQL에서 이 절차를 구현하려면 다음을 사용할 수 있습니다.

CREATE PROCEDURE sp_Validate( 
in_username varchar(50), 
in_email varchar(100)
)
begin

declare v_cnt int;
declare v_first_launch datetime;

select 1, FirstLaunch into v_cnt, v_first_launch
from Users
where Username = in_username;

if (v_cnt = 1) then
  update Users
  set Email = in_email 
  where Username = in_username;

  if (datediff(now(), v_first_launch) > 8) then
    select 0;
  else
    select 1;
  end if;
else
  insert into Users(Username, Email, FirstLaunch) 
  values (in_username, in_email, now());

  select 1;
end if;

end

언급URL : https://stackoverflow.com/questions/51819953/rewrite-sql-server-stored-procedure-to-mysqlmariadb