Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle12c 无法在oracle apex 5的运行时更改分析架构_Oracle12c_Oracle Apex 5 - Fatal编程技术网

Oracle12c 无法在oracle apex 5的运行时更改分析架构

Oracle12c 无法在oracle apex 5的运行时更改分析架构,oracle12c,oracle-apex-5,Oracle12c,Oracle Apex 5,我正在使用Oracle apex 5,Oracle数据库12c 我已成功地使用oracle DB 12c配置了oracle apex 5 我使用数据库表创建了身份验证方案,该身份验证方案成功运行 但我的要求是——每个用户都必须连接到自己的模式 (例如,user1=HR;user2=SCOTT) 在相同的应用中使用 很快,应用程序必须在运行时在多个模式上运行 但我没能做到,我试过下面的东西- 当前分析架构为“SCOTT”,请尝试使用- apex_application.g_flow_owner:=

我正在使用Oracle apex 5,
Oracle数据库12c

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

我使用数据库表创建了
身份验证方案
,该身份验证方案成功运行

但我的要求是——每个用户都必须连接到自己的
模式
(例如,user1=HR;user2=SCOTT) 在相同的应用中使用

很快,应用程序必须在运行时在多个模式上运行

但我没能做到,我试过下面的东西-

当前分析架构为“SCOTT”,请尝试使用-

  • apex_application.g_flow_owner:=“HR”--失败
  • ALTER SESSION SET CURRENT_SCHEMA='HR'--失败

  • 我不知道该怎么办,请有人帮我解决

    我认为您的思路是正确的,
    apex_应用程序.g_flow_所有者:='HR'命令应该可以做到这一点,但您必须将它放在共享组件>安全>安全属性>数据库会话>初始化PL/SQL代码中

    编辑:首先,为每个登录到应用程序的用户提供一个模式,我认为这不是最好的方法。只要想想,每一次修改都必须对所有模式进行。我建议您看看(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:在组件视图中,只需单击“流程”上的加号即可添加流程,并在向导中选择“提交时-计算和验证前”作为点选项。

    谢谢您的回答,这很好,但提出了另一个问题,问题是假设第一个用户使用“SCOTT”(默认模式)登录,第二个用户使用“HR”(默认模式)登录,登录后第二个用户如果第一个用户获得刷新屏幕,那么它将连接到最新的登录HR模式,而不是SCOTT模式。希望你能理解,请尝试解决它。我没有测试的地方,所以你可以通过执行此测试帮助我更好地理解它。当Scott登录时,他得到一个会话id,比如说id 1111,当Hr登录时,他(Hr)得到会话id 2222。斯科特刷新页面时会发生什么?他是保留会话id 1111还是已更改?他保留会话id 1111而不是其他会话id,以确保问题会话id未更改!Cristian_I,你能告诉我“提交时”流程创建的位置吗?在设计器模式下,在页面左侧选择第三个名为“处理”的选项卡,然后在“提交后”右键单击并创建流程。如果您在组件视图中,只需单击“流程”上的加号即可添加流程,并在向导中选择“提交时-计算和验证前”作为点选项。