【问题标题】:Identifier 'EXTRACTVALUE' must be declaredCompilation failed必须声明标识符“EXTRACTVALUE”编译失败
【发布时间】:2015-08-22 15:45:32
【问题描述】:

我试图将 xml 数据检索到变量,但给我错误提示“必须声明标识符 'EXTRACTVALUE' 编译失败”

VarConverstionFact    NUMBER;  
 BEGIN

    VarConverstionFact := TO_NUMBER(ExtractValue(PXML, '/OBJECT/Item/ItemUomLevelsList/ItemUomLevels/ConversionFactor'));

    IF VarConverstionFact > 0 THEN

      SELECT BIZZXE_V2_SCH.SQ_ITEM_ID.NEXTVAL INTO varID FROM DUAL;
      END IF;
END;

这是保存 xml 节点

 <Item>
<LocationId>0</LocationId>
<Id>0</Id>
 <ItemId>0</ItemId>
<ItemCode>SC12</ItemCode>
<ItemDescription>SCDITEM</ItemDescription>

<ItemUomLevelsList>
  <ItemUomLevels>
    <UomLevelId>1</UomLevelId>
    <UomId>9</UomId>
    <UomLongName>LG</UomLongName>
    <ConversionFactor>-53</ConversionFactor>
    <UomLevelStatus>1</UomLevelStatus>
    <UomLevelSystemUsageTypeId>2</UomLevelSystemUsageTypeId>
    <UomLevelImage>0</UomLevelImage>
    <UomLevelControlsList>
      <UomLevelControls>
        <ControlId>2</ControlId>
      </UomLevelControls>
    </UomLevelControlsList>
    <UomDimensionsList>
      <UomDimensions>
        <DimensionId>14</DimensionId>
        <DimensionValue>12</DimensionValue>
      </UomDimensions>
      <UomDimensions>
        <DimensionId>12</DimensionId>
        <DimensionValue>13</DimensionValue>
      </UomDimensions>
    </UomDimensionsList>
  </ItemUomLevels>
</ItemUomLevelsList>

当我尝试插入时,当我输入 VarConverstionFact =0 时,如果我 VarConverstionFact = -53,我没有收到任何数据错误,我收到无效数字错误。

select to_number(ExtractValue(PXML, '/OBJECT/Item/ItemUomLevelsList/ItemUomLevels/ConversionFactor')) 

从 DUAL 到 VarConverstionFact;

我在得到这个答案后使用了这个,我的包被编译没有错误,但是当我尝试插入上面的 xml 时,我得到了前面提到的错误(上面)

【问题讨论】:

    标签: oracle plsql oracle11g oracle-apex plsqldeveloper


    【解决方案1】:

    ExtractValue 不是 PLSQL 函数,我认为只能用作 SQL 语句的一部分。

    你可以这样做:

    select to_number(ExtractValue(PXML, '/OBJECT/Item/ItemUomLevelsList/ItemUomLevels/ConversionFactor')) 
    INTO VarConverstionFact FROM DUAL;
    

    VarConverstionFact := PXML.extract('/OBJECT/Item/ItemUomLevelsList/ItemUomLevels/ConversionFactor').getNumberVal();
    

    编辑:我假设 PXML 是一种 XMLTYPE

    【讨论】:

    • {"ORA-01722:无效号码\nORA-06512:在 \"SYS.XMLTYPE\",第 181 行\nORA-06512:在 \"BIZZXE_V2_SCH.ITEM\",第 165 行\nORA -06512:在第 1 行“} 我在使用该代码时收到此错误
    • 您要提取的值绝对是一个数字吗?该异常表明您尝试存储为数字的值实际上不是数字。空格或其他字符可能会导致问题。
    • 能否粘贴您要提取的 xml 节点?几乎只有当您尝试将不是数字的东西转换为数字时才会出现该错误。可能值得尝试将值放入 varchar2 变量中,这样您就可以看到返回的内容。编辑:顺便说一句,您使用了上述两种方法中的哪种方法?
    • 是的,我确实使用过,但是当我尝试插入数据时,我得到了上述错误,我确实用 xml 节点编辑了我的问题
    • 您正在尝试使用您提供的 xpath ('/OBJECT/Item/ItemUomLevelsList/ItemUomLevels/ConversionFactor') 提取“ConversionFactor”节点。在您的 xml 中,ConversionFactor 节点是“CD”,这不是一个有效数字。
    猜你喜欢
    • 2021-07-31
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2014-06-24
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多