将字符串转换为行的PL/SQL错误
我试图将表中的一个字符串拆分成单独的行,然后在另一个表中查找这些值,看看哪些值不存在。这是我正在使用的代码:将字符串转换为行的PL/SQL错误,sql,oracle,oracle11g,oracle10g,Sql,Oracle,Oracle11g,Oracle10g,我试图将表中的一个字符串拆分成单独的行,然后在另一个表中查找这些值,看看哪些值不存在。这是我正在使用的代码: SELECT NAME, desc, LABEL, trim(x.column_value.extract('e/text()')) AS ID from table1 T1, table (xmlsequence(xmltype('<e><e>' || replace(str_work,' ','</e><e>')|| '</e
SELECT NAME, desc, LABEL, trim(x.column_value.extract('e/text()')) AS ID
from table1 T1, table (xmlsequence(xmltype('<e><e>' || replace(str_work,' ','</e><e>')||
'</e></e>').extract('e/e'))) x
where
NOT EXISTS (SELECT *
FROM
tabl2 T2
WHERE
T1.ID = x.ID) AND t1.str_work IS NOT NULL);
我不知道问题出在哪里。我将感谢你的帮助和建议
谢谢。(重点加上):
您可以使用列别名c\u alias
,立即为
选择列表中的前一个表达式,以便列
以新标题显示。别名有效地重命名了select
查询持续时间的列表项别名可在中使用
orderby
子句,但不包括查询中的其他子句。
因此,您不能在子查询中引用ID
别名。不过,该别名并非来自您标记为x
的内联视图。我认为,通过重复子查询中的trim
,可以解决这两个问题:
NOT EXISTS (SELECT *
FROM
tabl2 T2
WHERE
T1.ID = trim(x.column_value.extract('e/text()')))
AND t1.str_work IS NOT NULL);
但是这应该是指T2.ID
——否则就没有相关性了
或者,您可以引入另一个内联视图来避免重复,但这可能会增加复杂性,但不会带来太多好处
NOT EXISTS (SELECT *
FROM
tabl2 T2
WHERE
T1.ID = trim(x.column_value.extract('e/text()')))
AND t1.str_work IS NOT NULL);