【发布时间】:2020-07-23 03:25:47
【问题描述】:
我的理解是,在 Postgres 数据库中,我们可以编写 SQL 风格的用户创建函数和 PlpgSQL 风格的用户创建函数。他们应该能够从一个翻译到另一个。首先,我在概念上错了吗?
这是一个例子:
我试图在下面转换这样的代码:
CREATE OR REPLACE FUNCTION getNthHighestSalary(N integer) RETURNS integer
AS $$
BEGIN
return (
select distinct salary
from employee
order by salary
limit 1 offset $1-1);
END;$$ LANGUAGE plpgsql;
变成类似:
CREATE OR REPLACE FUNCTION getNthHighestSalary(N integer) RETURNS integer
AS
BEGIN
return (
select distinct salary
from employee
order by salary
limit 1 offset $1-1);
END; LANGUAGE SQL;
无论我如何尝试,我转换成的代码都无法在 Postgres 数据库中运行,并且总是抛出奇怪的语法错误。
那么如何将上面的代码转换为能够在 Postgres 数据库中运行的可行标准 SQL 函数?特别是请解释问题出在哪里以及 Postgres 数据库环境中标准 SQL 和 Plpgsql 语法之间的主要区别是什么。非常感谢
顺便说一句,这里是创建测试表和插入测试数据的代码:
create table Employee
(
id varchar(255) PRIMARY KEY,
Salary numeric
);
insert into Employee values('1',100),('2',200),('3',300);
【问题讨论】:
-
什么是标准 SQL 函数? ANSI 标准没有定义 SQL 函数。没有标准 SQL 函数之类的东西。每个支持 SQL 函数的 DBMS 供应商都有自己的语法来创建它们。
-
@Andreas,感谢您的回答。我只是稍微修改了瓷砖。对困惑感到抱歉。我的意思是用户定义的函数。不是本机功能。即:由 CREATE FUNCTION 语句创建的那些。
标签: sql postgresql plpgsql