我正在尝试使用内置的XML函数,但我得到了一个%s: invalid identifier错误。没有XML函数,Selects工作得很好。
有什么错误吗?
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)发布于 2013-05-10 18:40:50
@elimerv,
你确定你没有其他的东西代替预期的“单引号”吗?另外,您也不知道"pm“表在pm_id列中有哪些类型的数据(BTW,您最新的sample_data似乎不正确,因为您的sample_data子查询有一个"id”列,而您的主要查询引用"pm_id“列)。这就是我首先在11.2.0.1上得到的,您的最新查询(除了使用的表外):
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现在,使用正确的列名:
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而且,当我用一个不同的(但看起来相似的)字符替换其中一个“单引号”时:
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处理来解决问题吗?
发布于 2013-05-10 10:16:44
我认为菲尔走在正确的轨道上。您需要将CTE ("WITH子句“)从子选择中移出。
试试这个:
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
)发布于 2013-05-10 12:53:05
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>https://dba.stackexchange.com/questions/41896
复制相似问题