我的理解是,在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数据库中都不起作用,而且总是抛出奇怪的语法错误。
那么,如何将上面的代码转换成一个可行的标准sql函数,该函数能够在postgres数据库中运行呢?请特别说明问题出在哪里,以及在postgres数据库环境中标准sql和plpgsql语法的主要区别是什么。谢谢
顺便说一句,下面是创建测试表和插入测试数据的代码:
create table Employee
(
id varchar(255) PRIMARY KEY,
Salary numeric
);
insert into Employee values('1',100),('2',200),('3',300);
1条答案
按热度按时间mqkwyuun1#
如果你想用
LANGUAGE SQL
,那么您需要做一些更改。首先是摆脱
BEGIN
以及END
.第二是简单地陈述
SELECT
不带RETURN
关键字。还有其他一些问题:你应该
order by salary desc
,返回类型为numeric
而不是integer
,你需要逃离;
字符,所以用$$
当您执行plpgsql函数时。