什么';这相当于PostgreSQL中的Oracle包

什么';这相当于PostgreSQL中的Oracle包,postgresql,package,Postgresql,Package,我对PostgreSQL很陌生,我想知道是否存在这样的东西 我看到了一些讨论,但没有具体内容 谢谢 没有,没有等价物 唯一一个远程相似的事情是为每个“包”创建一个模式,并将一个包的所有功能放入该模式中。这样,您至少有一些类似于包提供给您的名称空间 当然,这根本不会给您包私有函数或包范围的变量 如postgresql之前所述,它没有包 名称空间的示例。它可以放在单个sql文件中 也可以类似地添加其他方法 --drop function if exists pack_exmpl.get_name(b

我对PostgreSQL很陌生,我想知道是否存在这样的东西

我看到了一些讨论,但没有具体内容


谢谢

没有,没有等价物

唯一一个远程相似的事情是为每个“包”创建一个模式,并将一个包的所有功能放入该模式中。这样,您至少有一些类似于包提供给您的名称空间


当然,这根本不会给您包私有函数或包范围的变量

如postgresql之前所述,它没有包

名称空间的示例。它可以放在单个sql文件中

也可以类似地添加其他方法

--drop function if exists pack_exmpl.get_name(bigint);
--drop function if exists pack_exmpl.get_abbr(bigint);    
--drop schema if exists pack_exmpl;

drop schema if exists pack_exmpl cascade;
create schema pack_exmpl;

create or replace function pack_exmpl.get_name(p_id bigint)
returns varchar as $$
declare
  l_retval varchar;
begin
   select name into l_retval from example_table where id = p_id;
   return l_retval;
end;
$$ language plpgsql IMMUTABLE;

create or replace function pack_exmpl.get_abbr(p_id bigint)
returns varchar as $$
declare
  l_retval varchar;
begin
  select abbr into l_retval from example_table where id = p_id;
  return l_retval;
end;
$$ language plpgsql IMMUTABLE;

:-(太糟糕了……包真的很有效!@Shvalb:我一点都不喜欢包,因为你不得不把(实现的)完整的源代码放进去在一个文件中。这使得团队中处理大型软件包变得更加困难。因此,我们最终将软件包函数提取为常规函数,只是为了更好地管理源代码……是的,我可以想象这将是一个问题……我只是不适合制作许多本应是私有的公共函数。