oracle - 我无法使用 fn:collection 提取数据
问题描述
我正在使用 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
我有现有的表,例如: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;
Oracle 生成错误:
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/*
,","
)
' 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
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
推荐阅读
- java - android java Map 与自定义 BiFunction 合并
- r - 轧制 min 无需更换
- performance - 为什么 glTexSubImage2D 这么慢?
- php - 如果两个表中都存在相同的 ID,如何从 Select DropDown 中隐藏选项
- javascript - 如何使用jquery获取单击的href标签的数据属性
- c# - 未知(子类)类型的通用集合
- python-3.x - 更新从读取字典的 for 循环生成的 QLineEdit 文本框中的文本
- c++ - 从多个进程和同一进程内注册相同的 ETW TraceLogging 提供程序 GUID
- .net-core - 如何在 dotnet core 中使用存储库模式创建 API
- git - 在github上创建github页面,但是本地是最新的?