Postgresql 如何从过程返回所有字段?
现在我有以下程序:Postgresql 如何从过程返回所有字段?,postgresql,stored-procedures,Postgresql,Stored Procedures,现在我有以下程序: CREATE OR REPLACE FUNCTION find_city_by_name(match varchar) RETURNS TABLE(city_name varchar) LANGUAGE plpgsql as $$ BEGIN RETURN QUERY WITH r AS ( SELECT short_name FROM geo_cities WHERE shor
CREATE OR REPLACE FUNCTION find_city_by_name(match varchar) RETURNS TABLE(city_name varchar) LANGUAGE plpgsql as $$
BEGIN
RETURN QUERY WITH r AS (
SELECT short_name FROM geo_cities WHERE short_name ILIKE CONCAT(match, '%')
)
SELECT r.short_name FROM r;
END;
$$
我要返回所有字段*而不仅仅是短名称。我需要在我的过程中更改什么?如果你想要一个实行,你必须在return子句中显式声明所有字段:
create table geo_cities (
short_name varchar,
long_name varchar
);
insert into geo_cities values ('BERLIN', 'BERLIN'), ('BERLIN 2','BERLIN TWO');
CREATE OR REPLACE FUNCTION find_city_by_name(match varchar)
RETURNS TABLE(city_name varchar, long_name varchar)
LANGUAGE plpgsql
AS
$$
BEGIN
RETURN QUERY WITH r AS (
SELECT * FROM geo_cities WHERE short_name ILIKE CONCAT(match, '%')
)
SELECT * FROM r;
END;
$$;
select * from find_city_by_name('BERLIN');
请参阅运行于以下位置的示例:如果您想要一个实行,则必须显式声明return子句中的所有字段:
create table geo_cities (
short_name varchar,
long_name varchar
);
insert into geo_cities values ('BERLIN', 'BERLIN'), ('BERLIN 2','BERLIN TWO');
CREATE OR REPLACE FUNCTION find_city_by_name(match varchar)
RETURNS TABLE(city_name varchar, long_name varchar)
LANGUAGE plpgsql
AS
$$
BEGIN
RETURN QUERY WITH r AS (
SELECT * FROM geo_cities WHERE short_name ILIKE CONCAT(match, '%')
)
SELECT * FROM r;
END;
$$;
select * from find_city_by_name('BERLIN');
请参阅运行在以下位置的示例:这里是一个简化的w/o WITH and WITH language sql版本,我已在对相邻答案的评论中提到:
create or replace function find_city_by_name(text)
returns table(city_name varchar, long_name varchar)
as $$
select * from geo_cities where short_name ilike $1 || '%';
$$ language sql;
此外,您可能会发现,使用geo_cities集合引用定义函数签名的geo_cities表本身更方便:
-这将允许您更改geo_cities表的结构,而无需更改函数的定义。以下是一个简化的w/o和sql语言版本,我已在对相邻答案的评论中提到:
create or replace function find_city_by_name(text)
returns table(city_name varchar, long_name varchar)
as $$
select * from geo_cities where short_name ilike $1 || '%';
$$ language sql;
此外,您可能会发现,使用geo_cities集合引用定义函数签名的geo_cities表本身更方便:
-这将允许您更改geo_cities表的结构,而不需要更改函数的定义。如何调用函数?如何调用函数?我还注意到,这里实际上不需要plpgsql。这个函数可以很容易地用sql语言定义,并且定义会更短。这里看起来也像smth,这不是真的需要。是的。但我相信这个过程是一个更复杂的例子。在这种情况下,重要的部分是返回tablecity\u name varchar,long\u name varcharI还注意到这里并不真正需要plpgsql。这个函数可以很容易地用sql语言定义,并且定义会更短。这里看起来也像smth,这不是真的需要。是的。但我相信这个过程是一个更复杂的例子。在这种情况下,重要的部分是返回tablecity\u name varchar,我需要的是long\u name varcharsetof geo\u cities,因为我不想在return子句中声明显式的所有字段。谢谢你的回答如果我在功能中添加内部连接,geo_cities对我没有帮助。在这种情况下,如何更改return子句?我的意思是返回表*,在这种情况下,您需要显式登记列。另外两个选项超出了我们在这里讨论的范围:创建视图v1作为选择。。。参加然后设置v1,但改变表格将是痛苦的;b探索Postgres的NoSQL/schemaless power–JSONB数据类型,使用它,从函数中返回JSON数据,这将为您提供更多的自由和灵活性。我需要设置geo_cities,因为我不想在return子句中声明显式的所有字段。谢谢你的回答如果我在功能中添加内部连接,geo_cities对我没有帮助。在这种情况下,如何更改return子句?我的意思是返回表*,在这种情况下,您需要显式登记列。另外两个选项超出了我们在这里讨论的范围:创建视图v1作为选择。。。参加然后设置v1,但改变表格将是痛苦的;b探索Postgres的NoSQL/Schemeless power–JSONB数据类型,使用它,从函数返回JSON数据,这将给您更多的自由和灵活性。