带通配符的 POSTGRES 过程
POSTGRES PROCEDURE with wildcard
我正在尝试使用 postgresql 创建一个带有通配符的过程,不幸的是我没有成功。看起来 postgresql 版本有不同的创建过程的方法,但是,我在 SQL Server 上找到了更多帮助。这是我尝试创建的简单程序:
create procedure getpeople (title varchar, city varchar)
LANGUAGE plpgsql
as $$
select * from salesperson where job_title=title and city like % city
$$;
我正在使用 postgreSQL12.1 而不是
您必须写出结果类型。语言是 sql
而不是 plpgsql
。
这个有效:
create table salesperson(
name text,
job_title text,
city text
);
create function getpeople (title varchar, city varchar)
returns salesperson
LANGUAGE sql
as $$
select * from salesperson where job_title=title and city like '%'||city
$$;
insert into salesperson values ('Boby', 'bos', 'ny');
select getpeople('bos','ny');
除了@Emilio Platzer 的回答:如果你想使用 PL/pgSQL
从你的函数(而不是过程)中获取多行,你可以将它设置为 return a table:
CREATE OR REPLACE FUNCTION getpeople (varchar,varchar)
RETURNS TABLE (name text, job_title text, city text)
AS $$
BEGIN
RETURN QUERY
(SELECT * FROM salesperson sp
WHERE sp.job_title= AND sp.city LIKE ||'%');
END
$$ LANGUAGE plpgsql;
.. 并这样称呼它:
SELECT * FROM getpeople('ceo','D');
演示:db<>fiddle
我正在尝试使用 postgresql 创建一个带有通配符的过程,不幸的是我没有成功。看起来 postgresql 版本有不同的创建过程的方法,但是,我在 SQL Server 上找到了更多帮助。这是我尝试创建的简单程序:
create procedure getpeople (title varchar, city varchar)
LANGUAGE plpgsql
as $$
select * from salesperson where job_title=title and city like % city
$$;
我正在使用 postgreSQL12.1 而不是
您必须写出结果类型。语言是 sql
而不是 plpgsql
。
这个有效:
create table salesperson(
name text,
job_title text,
city text
);
create function getpeople (title varchar, city varchar)
returns salesperson
LANGUAGE sql
as $$
select * from salesperson where job_title=title and city like '%'||city
$$;
insert into salesperson values ('Boby', 'bos', 'ny');
select getpeople('bos','ny');
除了@Emilio Platzer 的回答:如果你想使用 PL/pgSQL
从你的函数(而不是过程)中获取多行,你可以将它设置为 return a table:
CREATE OR REPLACE FUNCTION getpeople (varchar,varchar)
RETURNS TABLE (name text, job_title text, city text)
AS $$
BEGIN
RETURN QUERY
(SELECT * FROM salesperson sp
WHERE sp.job_title= AND sp.city LIKE ||'%');
END
$$ LANGUAGE plpgsql;
.. 并这样称呼它:
SELECT * FROM getpeople('ceo','D');
演示:db<>fiddle