You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从SYS_REFCURSOR中提取值并将Id存入变量?

从SYS_REFCURSOR的嵌套XML中提取Id并存入变量

实现步骤(Oracle PL/SQL)

  1. 读取游标数据:先从SYS_REFCURSOR中取出包含转义XML的ITEM字段值。
  2. 还原转义XML:将ITEM里的&lt;、&gt;转义字符替换为真实的XML标签<、>。
  3. 解析XML提取Id:通过XMLTYPE类型解析处理后的XML,用XPath定位目标Id节点并提取数值。

示例代码

DECLARE
  v_cursor    SYS_REFCURSOR;
  v_item_xml  CLOB;
  v_parsed_xml XMLTYPE;
  v_target_id NUMBER;
BEGIN
  -- 替换为你实际获取SYS_REFCURSOR的逻辑(比如调用返回游标的存储过程)
  -- OPEN v_cursor FOR SELECT ITEM FROM your_source_table;

  -- 读取游标中的单行数据
  FETCH v_cursor INTO v_item_xml;
  CLOSE v_cursor;

  -- 还原转义的XML标签
  v_item_xml := REPLACE(REPLACE(v_item_xml, '&lt;', '<'), '&gt;', '>');

  -- 解析XML并提取<SolicitudModificacionContrato>下的Id
  v_parsed_xml := XMLTYPE(v_item_xml);
  v_target_id := v_parsed_xml.EXTRACT('/SolicitudModificacionContrato/Id/text()').GETNUMBERVAL();

  -- 若需提取<Tipo>下的Id,替换XPath即可:
  -- v_target_id := v_parsed_xml.EXTRACT('/SolicitudModificacionContrato/Tipo/Id/text()').GETNUMBERVAL();

  -- 验证提取结果(可选)
  DBMS_OUTPUT.PUT_LINE('提取的Id值:' || v_target_id);
END;
/

补充说明

  • 若游标包含多行数据,将FETCH逻辑放入循环即可:
    LOOP
      FETCH v_cursor INTO v_item_xml;
      EXIT WHEN v_cursor%NOTFOUND;
      -- 重复后续XML解析、提取逻辑
    END LOOP;
    
  • 确保ITEM中的XML片段是完整的(示例中<Nombre>标签未闭合,实际数据需保证XML结构合法,否则解析会报错)。

内容的提问来源于stack exchange,提问作者Felipe Levinir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:03:18