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

含XML列的Oracle表在SQL Developer及Power BI中无数据显示问题

解决SQL Developer与Power BI无法显示含XML列Oracle表数据的问题

问题背景

复制的测试库中,含XMLType列的DSI.SVC_RQST表在后端应用中能正常返回数据,但在SQL Developer(23.1.0.097)和Power BI里查询时返回空结果——即便仅查询非XML列也无法获取数据。已尝试SQL Developer的「工具-首选项-数据库-高级-在网格中显示XML值」设置及表别名,均无效。

环境信息

  • SQL Developer版本:23.1.0.097
  • Oracle数据库版本:19c Standard Edition 2 Release 19.0.0.0.0 - Production

表结构(DDL)

CREATE TABLE "DSI"."SVC_RQST" 
   (    "RQS_ID" NUMBER DEFAULT NULL NOT NULL ENABLE, 
    "SBS_GUI" RAW(16) NOT NULL ENABLE, 
    "COM_TOK_GUI" RAW(16) NOT NULL ENABLE, 
    "FUN_PRM" "SYS"."XMLTYPE"  NOT NULL ENABLE, 
    "CON_PRM" "SYS"."XMLTYPE" , 
    "DAT_CRE" DATE DEFAULT SYSDATE NOT NULL ENABLE, 
    "SER_GUI" RAW(16) NOT NULL ENABLE, 
     CONSTRAINT "SVC_RQST_PK" PRIMARY KEY ("RQS_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "BUTPROD_INDX"  ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "BUTPROD_DATA"   NO INMEMORY 
 XMLTYPE COLUMN "FUN_PRM" STORE AS SECUREFILE BINARY XML (
  TABLESPACE "BUTPROD_DATA" ENABLE STORAGE IN ROW CHUNK 8192
  NOCACHE LOGGING  NOCOMPRESS  KEEP_DUPLICATES 
  STORAGE(INITIAL 106496 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) ALLOW NONSCHEMA DISALLOW ANYSCHEMA 
 XMLTYPE COLUMN "CON_PRM" STORE AS SECUREFILE BINARY XML (
  TABLESPACE "BUTPROD_DATA" ENABLE STORAGE IN ROW CHUNK 8192
  NOCACHE LOGGING  NOCOMPRESS  KEEP_DUPLICATES 
  STORAGE(INITIAL 106496 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) ALLOW NONSCHEMA DISALLOW ANYSCHEMA 

示例数据

RQS_ID 2275473,
SBS_GUI 9D2749A0328E42DAB0D770495CD4D2AA,
COM_TOK_GUI 1F9A7BAC0EB08236E06301644B0A4EBB,
FUN_PRM <OrdersGet>
  <Service Name="OrdersGet"/>
  <Parameters>
    <Parameter Code="RestrictionCode" Value="5"/>
    <Parameter Code="XMLScope" Value="2"/>
    <Parameter Code="PurchasePrice" Value="N"/>
    <Parameter Code="SellingPrice" Value="N"/>
    <Parameter Code="CheckPointResponsible" Value="N"/>
    <Parameter Code="FirstTopElements" Value="30"/>
    <Parameter Code="ClearQueue" Value="Y"/>
  </Parameters>
  <Companies>
    <Company>
      <TranscodificationCode>ORDERS_GET</TranscodificationCode>
      <Code>ABT</Code>
      <ProfileCode>P18</ProfileCode>
      <MenuCode>DSI_TMS_ORD_GET</MenuCode>
      <EntityCode>ORDER</EntityCode>
      <Parameters>
        <Parameter Code="ThirdPartyCode" Value="P18"/>
      </Parameters>
      <Agencies>
        <Agency>
          <Code>01</Code>
        </Agency>
      </Agencies>
    </Company>
  </Companies>
</OrdersGet>    
DAT_CRE 14/08/2024  07:03:01,
SER_GUI 1F9CEFF33749BB94E06301644B0ADD47

解决方案

1. 修复XML列存储元数据

测试库复制过程中,SecureFile Binary XML的存储属性可能出现异常,重新执行存储定义修复:

ALTER TABLE DSI.SVC_RQST MODIFY COLUMN FUN_PRM STORE AS SECUREFILE BINARY XML (
  TABLESPACE "BUTPROD_DATA" ENABLE STORAGE IN ROW CHUNK 8192
  NOCACHE LOGGING NOCOMPRESS KEEP_DUPLICATES
  STORAGE(INITIAL 106496 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 BUFFER_POOL DEFAULT)
);

ALTER TABLE DSI.SVC_RQST MODIFY COLUMN CON_PRM STORE AS SECUREFILE BINARY XML (
  TABLESPACE "BUTPROD_DATA" ENABLE STORAGE IN ROW CHUNK 8192
  NOCACHE LOGGING NOCOMPRESS KEEP_DUPLICATES
  STORAGE(INITIAL 106496 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 BUFFER_POOL DEFAULT)
);

2. 刷新表统计信息

确保客户端工具能获取正确的表元数据:

EXEC DBMS_STATS.GATHER_TABLE_STATS(
  OWNNAME => 'DSI',
  TABNAME => 'SVC_RQST',
  CASCADE => TRUE,
  ESTIMATE_PERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE
);

3. 临时查询方案(绕过XML解析)

如果上述修复无效,查询时将XMLType转为字符串:

SELECT 
  RQS_ID,
  SBS_GUI,
  COM_TOK_GUI,
  FUN_PRM.getClobVal() AS FUN_PRM,
  CON_PRM.getClobVal() AS CON_PRM,
  DAT_CRE,
  SER_GUI
FROM DSI.SVC_RQST;

4. Power BI适配方案

Power BI对Oracle XMLType支持有限,创建视图封装转换后的列:

CREATE OR REPLACE VIEW DSI.V_SVC_RQST AS
SELECT 
  RQS_ID,
  SBS_GUI,
  COM_TOK_GUI,
  FUN_PRM.getClobVal() AS FUN_PRM,
  CON_PRM.getClobVal() AS CON_PRM,
  DAT_CRE,
  SER_GUI
FROM DSI.SVC_RQST;

之后Power BI连接该视图即可正常获取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:14:55