【问题标题】:Is there any way to convert MSSQL script to PostgreSQL script?有没有办法将 MSSQL 脚本转换为 PostgreSQL 脚本?
【发布时间】:2020-07-06 17:25:22
【问题描述】:

我需要将此过程从 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-server postgresql stored-procedures plpgsql


    【解决方案1】:

    这个过程对我来说毫无意义。它被称为 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;
    

    由于该过程似乎只返回一个值 (@Rest),我可能会将其转换为函数,而不是使用可疑的 OUT 参数。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-01-08
        • 1970-01-01
        • 1970-01-01
        • 2013-12-05
        • 1970-01-01
        • 2020-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多