有没有办法将 MSSQL 脚本转换为 PostgreSQL 脚本?

Is there any way to convert MSSQL script to PostgreSQL script?

我需要将此过程从 MSSQL 转换为 PostgreSQL。

CREATE PROCEDURE GetUserPhone
    @PhoneNumber        varchar(255)    output,
    @BIC            integer,
    @Rest           numeric(9,4)    output
AS
BEGIN
    select @PhoneNumber = @PhoneNumber
    select @Rest = 600.889
    INSERT INTO CallLimit
           (Phone ,Limit)
    VALUES
           (@PhoneNumber,18655)
END

是的,至少有一种方法:手动将交易 SQL 代码转换为 PL/pgSQL 代码 这是 PostgreSQL 默认的过程语言。 PostgreSQL 从版本 11 开始就有存储过程(旧版本需要使用存储函数)。

该文档没有将 Transact-SQL 转换为 PL/pgSQL 的示例,但有一些将 Oracle PL/SQL 转换为 PL/pgSQL 的示例:请参阅 PG docs .

这个程序对我来说毫无意义。它被称为 GetUserPhone,但据我所知它没有“获取”任何东西,它只是 插入 一个新行。

@PhoneNumber 声明为 OUT 参数似乎也没有任何意义。输出值只是设置为输入值(如果我正确理解该代码)。 @BIC没有用到,完全可以去掉

据我所知,这可以转换为如下形式:

create or replace procedure insert_call_limit(p_phone_number text, inout p_rest numeric)
as
$$
begin
  insert into call_limit (phone, limit)
  values (p_phone_number, 18655);
  p_rest := 600.889
end;
$$
language plpgsql;

由于该过程似乎只 return 单个值 (@Rest) 我可能会把它变成一个函数,而不是使用可疑的 OUT 参数。

如果您需要更多详细信息,请参阅PL/pgSQL reference