长话短说,我们具有此功能...它是功能。
它被称为“ get_user_id”
,其作用是从上下文中获取有关apex登录的信息,然后从我们的自定义身份验证表中选择user_id。
此功能有5年或更长时间,因为我可以在db用户列表中看到APEX_030200用户,而我们的DBA说他是在回避Apex供公司使用时创建的。
create or replace function get_user_id return number as
client_info VARCHAR2(1000);
rezult number;
x_user varchar2(512);
begin
-- return 1;
DBMS_APPLICATION_INFO.READ_CLIENT_INFO ( client_info );
x_user := substr(client_info,INSTR(client_info, ':' ,3,1)+1) ;
select user_id
into rezult
from USERS
where upper(login) = upper(x_user) ;
RETURN rezult ;
EXCEPTION
WHEN OTHERS THEN
RETURN -1;
end;
是的...我尝试运行此查询:
select * from (0,5 x 10^6 rows ) where user_id = get_user_id;
并且我们的服务器花了2分钟的时间不返回任何行,
我开始阅读有关优化sql等函数的信息,而我得出的结论是,仅需0.1秒,我就可以将其记录下来:
select * from (0,5 x 10^6 rows ) where user_id = (select get_user_id from dual );
然后我开始分析函数内部的实际内容,手掌朝上,
select * from (0,5 x 10^6 rows )
where user_id in (
select user_id from users
where upper(login) = nvl(upper(:APP_USER),'SYSTEM')
)
查询时间:0.03秒。
问题已解决...但是
这里是我的问题,
是否有任何体面的方法可以更改Apex raports /项目源和数据库视图中所有sql实例
get_user_id
至
(
select user_id from users
where upper(login) = nvl(upper(:APP_USER),'SYSTEM')
)
编辑:
我想更新apex内部表any1有任何经验吗?
怎么样:导出应用程序。结果将是.SQL文件-您可以在任何文本编辑器中打开的文本文件。去做。执行搜索/替换。
然后放下(*)应用程序,并从修改后的.SQL文件导入它。
(*)小心跌落...。我建议您首先在测试工作区(而不是在生产环境中)进行尝试,以防万一。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句