在oracle apex 5中,无法在运行时更改解析模式

时间:2015-11-23 04:50:43

标签: oracle12c oracle-apex-5

我正在使用Oracle apex 5oracle database 12c

我已使用oracle apex 5成功配置oracle DB 12c

我使用数据库表创建了authentication scheme,认证方案成功运行。

但我的要求是 - 每个用户都必须连接到自己的schema (eg.user1 = HR; user2 = SCOTT) 在相同的应用程序中。

很快,应用程序必须在multiple schemas的{​​{1}}上运行。

但是我无法做到这一点,我尝试过以下的东西 -

当前解析模式是'SCOTT'尝试使用 -

更改它
  1. apex_application.g_flow_owner:='HR'; --Failed
  2. ALTER SESSION SET CURRENT_SCHEMA ='HR'; --Failed
  3. 我不明白该怎么做,请一些人帮我解决它。

1 个答案:

答案 0 :(得分:1)

我认为你走在正确的轨道上,apex_application.g_flow_owner := 'HR';命令可以解决这个问题,但你必须将它放在共享组件>安全>安全属性>数据库会话>初始化PL / SQL代码

编辑:首先,为每个登录应用程序的用户提供架构,我认为这不是最好的方法。试想一下,必须对所有模式进行每次修改。我建议你看看Virtual Private Database(VPD)它可以帮助你控制数据访问。

但如果您仍想尝试更改架构,我认为您可以这样做。为应用程序中的每个页面创建两个进程;一个在在负载之前加载,另一个在提交时。此过程应包含以下内容:

BEGIN
if :APP_USER='SCOTT' THEN
apex_application.g_flow_owner := 'SCOTT';
ELSE
apex_application.g_flow_owner := 'HR';
END IF
END;

这样当Scott加载页面时,架构将更改为SCOTT,并且他会看到来自其架构的数据。当HR加载页面时,模式将更改为HR并且他会看到他的数据。提交页面时也是如此;架构首先更改,然后执行其他操作。

这第二个想法不是防弹,这就是为什么我建议你重新思考你想做什么。

Edit2:在组件视图中,只需单击“进程”上的加号即可添加进程,并在向导中为“点”选项选择“提交时 - 计算和验证前”。 enter image description here