From SQL Server to Postgres



我是Postgresql的新手;我以前只使用过SQL Server,所以我正在尝试迁移ASP。NET MVC在ASP。NET Core 3.0并在此过程中用PostgreSQL替换SQL Server,并迁移到Ubuntu。

有人能告诉我这里的查询出了什么问题吗?

CREATE OR REPLACE PROCEDURE officekit.testsp (mode CHARACTER)
LANGUAGE plpgsql AS $plpgsql$
BEGIN
IF mode = 'test' THEN
SELECT a,b,c,d FROM testSchema.test;
END IF;
COMMIT;
END;
$plpgsql$;

在您的代码中,几乎每一行都不好。

首先,如果您想在Postgres中编写存储过程,请从文档开始。MSSQL中存储过程的概念与Oracle、DB2中的概念有很大不同,当然也与Postgres中的概念不同。Postgres中的PLpgSQL类似于Oracle的PL/SQL。最好的做法是忘记所有关于存储过程的知识,从头开始。

错误:

Postgres中的
  1. 过程不能返回数据-只有函数才能返回数据-在您的示例中,您可能需要一个表函数。

    CREATE OR REPLACE FUNCTION officekit.testsp(mode text)
    RETURNS TABLE(a text, b text, c text)
    AS $$
    BEGIN
    IF mode = 'test' THEN
    RETURN QUERY SELECT test.a, test.b, test.c FROM test;
    END IF;
    END;
    $$ LANGUAGE plpgsql; 
    

就我个人而言,我不喜欢这种编程风格。函数不应该仅仅包装查询。很多重要的性能问题和体系结构问题都是由于对这种可能性的不当使用而产生的,但这取决于上下文。

  1. 为什么有提交?此代码不会对数据库进行任何更改。没有理由调用commit

最新更新