首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内置XML函数

内置XML函数
EN

Database Administration用户
提问于 2013-05-10 08:05:06
回答 3查看 315关注 0票数 0

我正在尝试使用内置的XML函数,但我得到了一个%s: invalid identifier错误。没有XML函数,Selects工作得很好。

有什么错误吗?

代码语言:javascript
运行
复制
select id,full_name from users where id in(
with sample_data as
(
 (select pm_id 
 from pm  where p_id=30369)
)
select cast(t.column_value.extract('//text()') as varchar2(40)) val
  from sample_data,
  table( xmlsequence( xmltype(
    '<x><x>' || replace(pm_id, '#@#', '</x><x>') || '</x></x>'
  ).extract('//x/*'))) t)
EN

回答 3

Database Administration用户

发布于 2013-05-10 18:40:50

@elimerv,

你确定你没有其他的东西代替预期的“单引号”吗?另外,您也不知道"pm“表在pm_id列中有哪些类型的数据(BTW,您最新的sample_data似乎不正确,因为您的sample_data子查询有一个"id”列,而您的主要查询引用"pm_id“列)。这就是我首先在11.2.0.1上得到的,您的最新查询(除了使用的表外):

代码语言:javascript
运行
复制
with sample_data as (
   select '123#@#' id
   from dual
  )
  select sysdate from dual where dummy  in(
    select cast(t.column_value.extract('//text()') as varchar2(400)) val
    from sample_data,
         table(xmlsequence(xmltype('<x><x>'||replace(pm_id,'#@#','</x><x>')||'</x></x>').extract('//x/*'))) t
  )
 10  /
         table(xmlsequence(xmltype('<x><x>'||replace(pm_id,'#@#','</x><x>')||'</x></x>').extract('//x/*'))) t
                                                     *
ERROR at line 8:
ORA-00904: "PM_ID": invalid identifier

现在,使用正确的列名:

代码语言:javascript
运行
复制
with sample_data as (
   select '123#@#' pm_id
   from dual
  )
  select sysdate from dual where dummy  in(
    select cast(t.column_value.extract('//text()') as varchar2(400)) val
    from sample_data,
         table(xmlsequence(xmltype('<x><x>'||replace(pm_id,'#@#','</x><x>')||'</x></x>').extract('//x/*'))) t
  )
 10  /

no rows selected

而且,当我用一个不同的(但看起来相似的)字符替换其中一个“单引号”时:

代码语言:javascript
运行
复制
with sample_data as (
   select '123#@#' pm_id
   from dual
  )
  select sysdate from dual where dummy  in(
    select cast(t.column_value.extract('//text()') as varchar2(400)) val
    from sample_data,
         table(xmlsequence(xmltype('<x><x>'||replace(pm_id,'#@#','</x><x>')||'</x></x>').extract(`//x/*'))) t
  )
 10  /
         table(xmlsequence(xmltype('<x><x>'||replace(pm_id,'#@#','</x><x>')||'</x></x>').extract(`//x/*'))) t
                                                                                                 *
ERROR at line 8:
ORA-00911: invalid character

这能让你知道吗?顺便说一句,您确定需要XML处理来解决问题吗?

票数 2
EN

Database Administration用户

发布于 2013-05-10 10:16:44

我认为菲尔走在正确的轨道上。您需要将CTE ("WITH子句“)从子选择中移出。

试试这个:

代码语言:javascript
运行
复制
with sample_data as (
 select pm_id 
 from pm  
 where p_id=30369
)
select id,
       full_name 
from users 
where id in(
  select cast(t.column_value.extract('//text()') as varchar2(40)) val
  from sample_data,
       table(xmlsequence(xmltype('<x><x>'||replace(pm_id,'#@#','</x><x>')||'</x></x>').extract('//x/*'))) t
)
票数 0
EN

Database Administration用户

发布于 2013-05-10 12:53:05

代码语言:javascript
运行
复制
SQL> with sample_data as (
  2   select  id
  3   from pm
  4   where p_id=30369
  5  )
  6  select id, full_name from users where id  in(
  7    select cast(t.column_value.extract('//text()') as varchar2(400)) val
  8    from sample_data,
  9         table(xmlsequence(xmltype('<x><x>'||replace(pm_id,'#@#','</x><x>')||'</x></x>').extract('//x/*'))) t
 10  )
 11  /
       table(xmlsequence(xmltype('<x><x>'||replace(pm_id,'
#@#','</x><x>')||'</x></x>').extract('//x/*'))) t
                                     *
ERROR at line 9:
ORA-00904: : invalid identifier


SQL>
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/41896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档