问题描述
我使用的是 Oracle Database 12c 企业版 12.1.0.2.0 版 - 64 位生产
我有现有的表,例如:my_scheme.my_existing_table 我可以选择并查看此表中的数据。
但是当我尝试使用 XMLQuery 从该表中读取数据时:
SELECT XMLQuery(
'for $i in fn:collection("oradb:/my_scheme/my_existing_table")/content/text()
return $i'
returning content
)FROM DUAL;
ORA-00942: table or view does not exist
也许有人缺少某些权利。请告诉我如何解决这个问题。
解决方法
例如,您有一个表 T
:
SQL> create table t as select level a,'b' b from dual connect by level<=10;
Table created.
SQL> select * from t;
A B
---------- -
1 b
2 b
3 b
4 b
5 b
6 b
7 b
8 b
9 b
10 b
10 rows selected.
您的查询应该是这样的:
SELECT XMLQuery(
'for $i in fn:collection("oradb:/XTENDER/T")/ROW/A/text()
return $i'
returning content
) as res
FROM DUAL;
RES
----------------------------
12345678910
即 fn:collection()
参数应该是 "oradb:/SCHEMA/TABNAME"
,然后你应该指定 /ROW/COLNAME
,其中 /ROW
列名是强制性的。
事实上,如果这真的是你想要的,你就不需要for
:
SELECT XMLQuery('fn:collection("oradb:/XTENDER/T")/ROW/A/text()' returning content) res FROM DUAL;
虽然我会将这些值与 ,
连接起来,如下所示:
SELECT
XMLQuery('
fn:string-join(
fn:collection("oradb:/XTENDER/T")/ROW/A/text(),","
)
' returning content) as res
FROM DUAL;
RES
--------------------------------------------------
1,2,3,4,5,6,7,8,9,10
或者来自 T 的所有列的几个变体:
SELECT
XMLQuery('
fn:string-join(
fn:collection("oradb:/XTENDER/T")/ROW/*,b,10,b
SELECT
XMLQuery('
fn:string-join(
for $i in fn:collection("oradb:/XTENDER/T")/ROW return string-join($i/*,"),"; "
)
' returning content) as res
FROM DUAL;
RES
--------------------------------------------------
1,b; 2,b; 3,b; 4,b; 5,b; 6,b; 7,b; 8,b; 9,b; 10,b