【发布时间】:2020-04-17 14:09:00
【问题描述】:
我有这个问题,我正在从 SQL Server 迁移到 PostgreSQL 12。
我正在尝试完成的场景:
函数应该有一个 RETURN 语句,无论是 SETOF 'tableType' 还是 RETURN TABLE(一些列数)
正文以记录计数开始,如果根据输入参数没有找到记录,则简单地返回零(0),否则返回 RETURN 语句中定义的整个记录集。
SQL Server 或 Oracle 中的等效部分是:他们只需将 SELECT 语句放入过程中即可完成此操作。但是,对于 PostgreSQL 来说,这有点困难。
任何建议,请。
我现在仍然可以完成的工作 - 如果没有找到记录,它将简单地返回 NULL,可能正在使用 PERFORM,或者可能选择 NULL 作为返回 tableType 列的列名。
希望我清楚!
我想要的是-
================================================ ==============
CREATE OR REPLACE FUNCTION public.get_some_data(
id integer)
RETURNS TABLE ( id_1 integer, name character varying )
LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
p_id alias for $1;
v_cnt integer:=0;
BEGIN
SELECT COUNT(1) FROM public.exampleTable e
WHERE id::integer = e.id::integer;
IF v_cnt= 0 THEN
SELECT 0;
ELSE
SELECT
a.id, a.name
public.exampleTable a
where a.id = p_id;
END;
$BODY$;
【问题讨论】:
-
这是一个函数还是一个过程?您甚至使用什么语言,SQL 或 PL/PGSQL?请给我们看看你的代码好吗?
-
我无法真正显示我的代码。但是,迁移是从 SQL Server 过程到 POstgrSQL 函数。我使用的语言是 pgplsql。如果你愿意,我可以写一个简短的程序让你明白,我想问什么。
-
如果您对下面无名马的回答不满意,这可能会有所帮助。
-
如果你的返回类型是多行,你不能返回数字
0。 -
是的..就是这样!我知道,只要检查一下,是否有任何解决方法。我知道它不是 PostgrSQL 的工作方式。
标签: postgresql plpgsql