将函数重构为SQL查询

Eaxxx

长话短说,我们具有此功能...它是功能。
它被称为“ 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章