获取 Oracle 中当前视图的所有者

Get owner of the current view in Oracle

我想创建一个视图,其中包含一个引用此视图所有者的列。类似的东西:

create or replace view scott.owner_v 
as
select something() owner from dual;

注意something() 不一定是函数或包引用。它可以是提供所需输出的任何内容。

因此,在 JEREMY 用户下查询 select owner from scott.owner_v,例如,将 return SCOTT,当我在 HR 模式中编译这样的视图时,我得到 HRowner 列中。

查询 SCOTT.owner_v 以获得 SCOTT 似乎很愚蠢,但我需要它来构建 DWH,指的是位于不同模式中的不同来源。因此,我将动态构建一个处于“更高”级别的新视图,该视图从所有模式中收集数据,这些模式具有额外的列,例如 owner ,它显示了数据源。我可以在构建这个“更高”视图时放置此专栏,但我希望它尽可能简单。

显然,我尝试将以下参数放入视图中

但它指的是当前登录的用户,而不是视图的所有者。

感谢任何帮助。

尝试

select owner from all_views where view_name = 'OWNER_V';

and/or 一些替代方案(USER_VIEWSDBA_VIEWSALL_OBJECS、...)。

只需创建 returns 拥有所有模式中的模式的本地函数,您要在其中创建视图:

create or replace function local_obj_owner return varchar2 as
begin
   return $$PLSQL_UNIT_OWNER;
end;
/

然后将其添加到您的视图中:

create view test_view as
select
  local_obj_owner as view_owner,
  dummy
from dual;