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

Oracle 使用XMLTABLE PLS-00302

askTom 2017-07-31
294

问题描述

当我尝试使用XMLTYPE和XMLTABLLE从XML块中进行选择时,我得到了PLS-00302。

这工作,我得到了所需的输出...
SELECT xt.*
  FROM (SELECT xmltype (
'
OrganizationOrganization TitleAccountAccount Title
01Pooled1234My Account
') xml_data FROM DUAL) x, XMLTABLE ('/TABLE/TR' PASSING x.xml_data COLUMNS "td1" VARCHAR2 (100) PATH 'TD[1]', "td2" VARCHAR2 (100) PATH 'TD[2]', "td3" VARCHAR2 (100) PATH 'TD[3]', "td4" VARCHAR2 (100) PATH 'TD[4]') xt;
复制


输出看起来像这样...
td1 td2 td3 td4
组织机构名称账户名称
01池1234我的帐户

但是,当我尝试将该SQL放入PL/SQL时,出现302错误...
DECLARE
   lv1   VARCHAR2 (100);
   lv2   VARCHAR2 (100);
   lv3   VARCHAR2 (100);
   lv4   VARCHAR2 (100);
   lvc   CLOB
      := '
OrganizationOrganization TitleAccountAccount Title
01Pooled1234My Account
'; BEGIN FOR myrec IN (SELECT xt.* FROM (SELECT xmltype (lvc) xml_data FROM DUAL) x, XMLTABLE ('/TABLE/TR' PASSING x.xml_data COLUMNS "td1" VARCHAR2 (100) PATH 'TD[1]', "td2" VARCHAR2 (100) PATH 'TD[2]', "td3" VARCHAR2 (100) PATH 'TD[3]', "td4" VARCHAR2 (100) PATH 'TD[4]') xt) LOOP DBMS_OUTPUT.put_line ( 'MYREC-->' || myrec.td1 || ':' || myrec.td2 || ':' || myrec.td3 || ':' || myrec.td4 ); END LOOP; END;
复制


当我注释对列的引用时,循环完成没有错误...
--         || myrec.td1
--         || ':'
--         || myrec.td2
--         || ':'
--         || myrec.td3
--         || ':'
--         || myrec.td4
复制


如何在游标for循环中引用这些列?

谢谢!

专家解答

仔细检查该SQL的输出 :-)

SQL> SELECT xt.*
  2    FROM (SELECT xmltype (
  3  '
  4  
  5  
  6  
OrganizationOrganization TitleAccountAccount Title
01Pooled1234My Account
') 7 xml_data 8 FROM DUAL) x, 9 XMLTABLE ('/TABLE/TR' 10 PASSING x.xml_data 11 COLUMNS "td1" VARCHAR2 (100) PATH 'TD[1]', 12 "td2" VARCHAR2 (100) PATH 'TD[2]', 13 "td3" VARCHAR2 (100) PATH 'TD[3]', 14 "td4" VARCHAR2 (100) PATH 'TD[4]') xt; td1 ---------------------------------------------------------------------------------------------------- td2 ---------------------------------------------------------------------------------------------------- td3 ---------------------------------------------------------------------------------------------------- td4 ---------------------------------------------------------------------------------------------------- Organization Organization Title Account Account Title 01 Pooled 1234 My Account
复制


参见列不是 “TD1” 等,它们是 “td1”。它们是 * 小写 *。

因此,您需要在plsql代码中引用它们作为引用的标识符,即myrec。“td1”

或者你可以将你的SQL更改为:

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

评论