暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle PL/SQL功能的性能

askTom 2017-07-24
309

问题描述

嗨,团队,
我需要一些帮助来提高性能

我有一个XML,如下所示,该XML将被输入到我的PL/SQL函数中

<?xml version = "1.0" encoding = "UTF-8"?>



1000
1001
1002




我的表如下
员工编号 (varchar2 (20))
PID (数字 (10))
Xml _ 员工详细信息 (XMLTYPE)

我的PL/SQL函数如下

创建或替换功能

员工 (CLOB中的xml)
返回号码

PRAGMA自主交易;
V_PID VARCHAR2(300);
V_MAINQUERY clob;
主游标SYS_REFCURSOR;
V_PIDCUR varchar2(30);
xml_details CLOB;
sqlErr varchar2(200);
开始
V_MAINQUERY:= '(从IMPP.EMPLOYEE A中选择PID,其中A.EMPLOYEE编号在 (SELECT EMPLOYEENUMBER
FROM XMLTABLE (xmlnamespaces(
''urn:global:cs:common'' AS "tns0")
, ''/tns0:Request'' PASSING
XMLType('|| in_XML||') COLUMNS baselist XMLTYPE PATH


''tns0:Conditions'') t1,
XMLTABLE (xmlnamespaces(
''urn:global:cs:common'' AS "tns0")
,
''tns0:Conditions/tns0:Numbers/tns0:Number''
PASSING t1.baselist COLUMNS
EMPLOYEENUMBER VARCHAR2(88) PATH
''text()'') xmlT
) ';



为V_MAINQUERY打开主游标;


循环
将主光标提取到V_PIDCUR中;
当主游标 % 未找到时退出;

开始
选择一个.PID,一个.MSG_EMPDETAILSDETAILS.getClobVal()
进入v_PID,来自impp.EMPLOYEE a的xml_EmployeeDetails,其中A.EMPLOYEEPID = ''| | V_PIDCUR | |'';
当其他人则例外
Raise_application_error (-20002,“在StudyDetails中发生了错误。” | | SQLERRM);
结束;
返回0;

END 循环;

返回0;
异常
当其他人那么
sqlErr := substr(sqlerrm,1,100);

结束;


我用粗体引号的内容可以用逗号分隔的员工编号列表替换,但是像这样,我不能有超过1000条记录。如果我使用上述的子查询,它会增加执行时间。

专家解答

看起来很多动态SQL和逐行处理的原因不多?

这一切可以简化为一个简单的:

for i in ( 
  SELECT A.PID,A.MSG_EMPDETAILSDETAILS.getClobVal() 
  FROM IMPP.EMPLOYEE A 
  WHERE A.EMPLOYEENUMBER IN
  (
  SELECT EMPLOYEENUMBER
  FROM  XMLTABLE (xmlnamespaces('urn:global:cs:common' AS "tns0"), 
        '/tns0:Request' PASSING XMLType(in_xml) 
        COLUMNS baselist XMLTYPE PATH 'tns0:Conditions') t1,
            XMLTABLE (xmlnamespaces('urn:global:cs:common' AS "tns0"),
                'tns0:Conditions/tns0:Numbers/tns0:Number'
               PASSING t1.baselist 
               COLUMNS EMPLOYEENUMBER VARCHAR2(88) PATH 'text()') xmlT
  )
) loop
    ...
  end loop;
end;




「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论