是否可以使用存储过程检索表?

Is it possible to retrieve tables with stored procedures?

这是我第一次使用 PostgreSQL 及其最受欢迎的界面 Pgadmin4。我注意到我无法在存储过程中使用 SELECT 获取 tables,但设法使用 returns 和 table 的函数来实现。但是,在 MySQL 中可以使用存储过程 return 查询,所以我开始怀疑我是否做错了什么...

提前致谢。

我在Mysql中使用的代码:

DELIMITER //
create procedure listar_ordenes_cat(in cat_name varchar(50)) 
begin
    select o.ordenid
    from ordenes o
    inner join detalle_ordenes d
    on o.ordenid = d.ordenid
    inner join productos pr
    on pr.productoid = d.productoid
    inner join categorias ca
    on ca.categoriaid = pr.categoriaid
    where ca.nombrecat = upper(cat_name);
end//

DELIMITER ;
call listar_ordenes_cat('Lacteos')

我必须在 Postgres 中使用的脚本:

create or replace function listar_ordenes_cat(in cat_name varchar(50)) 
returns table (ordenid int) as $$
begin
    return query
    select o.ordenid
    from ordenes o
    inner join detalle_ordenes d
    on o.ordenid = d.ordenid
    inner join productos pr
    on pr.productoid = d.productoid
    inner join categorias ca
    on ca.categoriaid = pr.categoriaid
    where ca.nombrecat = upper(cat_name);
end;

$$ language plpgsql


select * from listar_ordenes_cat('Lacteos')

您可以通过定义 SQL function 来获得您想要的内容。它最终与您的 MySql.

基本相同
create or replace function listar_ordenes_cat(in cat_name) 
  returns table (ordenid int) 
as $$

    select o.ordenid
      from ordenes o
     inner join detalle_ordenes d on o.ordenid = d.ordenid
     inner join productos pr      on pr.productoid = d.productoid
     inner join categorias ca     on ca.categoriaid = pr.categoriaid
     where ca.nombrecat = upper(cat_name);

$$ language sql;

但是直接不行,你不能从存储过程中得到它。