带通配符的 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