Oracle连接两个SQL选择函数

Oracle连接两个SQL选择函数,oracle,function,join,Oracle,Function,Join,我有一个Oracle函数,我正试图从中选择它,它将根据传递给它的参数返回用户列表或他们有权访问的应用程序列表 这将返回所有用户的列表: select * from TABLE(function_user('Users','')) 这将返回单个用户可以访问的所有应用程序的列表: select * from TABLE(function_user('Apps','(Username)')) 这两个函数都返回一个名为“col_val”的列 如何将这两个调用合并在一起,以返回所有用户的列表和他们有权

我有一个Oracle函数,我正试图从中选择它,它将根据传递给它的参数返回用户列表或他们有权访问的应用程序列表

这将返回所有用户的列表:

select * from TABLE(function_user('Users',''))
这将返回单个用户可以访问的所有应用程序的列表:

select * from TABLE(function_user('Apps','(Username)'))
这两个函数都返回一个名为“col_val”的列

如何将这两个调用合并在一起,以返回所有用户的列表和他们有权访问的应用程序的列表(两列)

我希望布局如下所示:

Username|Application
User1|app1
User1|app2
User2|app1
...
在此方面的任何帮助都将不胜感激


谢谢

尝试横向内联视图:

select x.column_value as user_name,
       y.column_value as App_name
from table( function_user('Users','')) x
cross join lateral (
   select *
   from table( function_user('Apps', '('||x.column_value||')' )) 
) y
;

使用
交叉应用
语法的另一个选项(简单一点):

select x.column_value as user_name,
       y.column_value as App_name
from table( function_user('Users','')) x
cross apply table( function_user('Apps', '('||x.column_value||')' )) y
;

当某些用户没有任何访问权限时,使用
outer apply
。在这种情况下,查询仍然显示用户,但结果集中的
app\u name
列为空

select x.column_value as user_name,
       y.column_value as App_name
from table( function_user('Users','')) x
outer apply table( function_user('Apps', '('||x.column_value||')' )) y
;

这个函数首先是如何工作的?它不是从
用户应用程序
表中读取的吗?为什么你不能直接从那张桌子上读你需要的东西?为什么您希望通过使用该表的函数开始执行此操作?函数中有复杂的逻辑-不幸的是,不是从一组简单的表中读取,这就是函数生成的原因。交叉连接不就是给我两个数据集的所有组合吗?这不是普通的交叉连接,而是(也称为横向内联视图)-->
横向交叉连接