sql – “ORA-22812:在尝试访问系统表时无法引用嵌套表列的存储表”
|
我的Oracle 12c数据库中有一个表 XML Schema创建: BEGIN
-- Register the schema
DBMS_XMLSCHEMA.registerSchema('http://www.example.com/fvInteger_12.xsd','<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="FeatureVector">
<xs:complexType>
<xs:sequence>
<xs:element name="feature" type="xs:integer" minOccurs="12" maxOccurs="12"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>',TRUE,FALSE);
END;
/
创建表: CREATE TABLE fv_xml_12_1000 (
id NUMBER,fv XMLTYPE)
XMLTYPE fv STORE AS OBJECT RELATIONAL
XMLSCHEMA "http://www.example.com/fvInteger_12.xsd"
ELEMENT "FeatureVector";
表DDL: SELECT DBMS_METADATA.GET_DDL( 'TABLE','FV_XML_12_1000') FROM DUAL; 上面的查询结果: CREATE TABLE "HIGIIA"."FV_XML_12_1000"
( "ID" NUMBER,"FV" "SYS"."XMLTYPE"
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"
VARRAY "FV"."XMLDATA"."feature" STORE AS TABLE "SYS_NTZqNkxcSIThTgU5pCWr3HmA=="
(( PRIMARY KEY ("NESTED_TABLE_ID","SYS_NC_ARRAY_INDEX$")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ENABLE)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ) RETURN AS LOCATOR
XMLTYPE COLUMN "FV" XMLSCHEMA "http://www.example.com/fvInteger_12.xsd" ELEMEN
T "FeatureVector" ID 4129
我想访问这个表,这是在HIGIIA模式中(确实在higiia的user_tables中). : SYS_NTZqNkxcSIThTgU5pCWr3HmA== 但是,我无法执行命令: desc SYS_NTZqNkxcSIThTgU5pCWr3HmA== 因为我收到错误:
查询: select * from "SYS_NTZqNkxcSIThTgU5pCWr3HmA==" 返回错误:
我该怎么做才能访问该表(表SYS_NTZqNkxcSIThTgU5pCWr3HmA ==)? 提前致谢! 解决方法您将XML文档存储为“对象关系”,这导致Oracle为存储创建内部表,您通常不需要直接访问该表.但是,您可以通过取消该表来;请注意,您必须包含一个表别名,并使用它来使点表示法正确解析;并且必须引用“功能”,因为它区分大小写: select f.id,t.column_value from fv_xml_12_1000 f cross join table(f.fv.xmldata."feature") t; 您无法看到整个fv或其隐式XMLDATA,只能看到varray中保存的特征值. 如果我创建三个虚拟行: insert into fv_xml_12_1000 values (1,xmltype.createxml ('<?xml version="1.0"?>
<FeatureVector xmlns:ns="http://www.example.com/fvInteger_12.xsd">
<feature>123</feature>
</FeatureVector>'));
insert into fv_xml_12_1000 values (2,xmltype.createxml ('<?xml version="1.0"?>
<FeatureVector xmlns:ns="http://www.example.com/fvInteger_12.xsd">
<feature>234</feature>
</FeatureVector>'));
insert into fv_xml_12_1000 values (3,xmltype.createxml ('<?xml version="1.0"?>
<FeatureVector xmlns:ns="http://www.example.com/fvInteger_12.xsd">
<feature>456</feature>
<feature>567</feature>
</FeatureVector>'));
那个查询给了我: ID Result Sequence
---------- ---------------
1 123
2 234
3 456
3 567
您也可以使用普通的XML DB机制访问XML文档;将存储的数据看作XML文档只需: select fv from fv_xml_12_1000; 或添加过滤器以选择单个ID的XML文档. 如果要从XML文档中提取元素,可以使用XQuery或XMLTable;这相当于上一个查询: select x.*
from fv_xml_12_1000 f
cross join xmltable('/' passing f.fv columns x xmltype path '.') x;
…但是你可以添加一个更有用的XPath表达式和/或columns子句来获得你想要的数据,例如: select f.id,x.feature from fv_xml_12_1000 f cross join xmltable( '/FeatureVector/feature' passing f.fv columns feature number path '.') x; 它为您提供主表ID值和所有相关的功能号,每个ID /功能一行.使用与以前相同的三个虚拟行,该查询为我提供: ID FEATURE
---------- ----------
1 123
2 234
3 456
3 567 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – NULL vs空字符串
- LINQ:如何在多个字段上使用linq扩展方法样式进行JOIN?
- 将表名前置到SQL中结果集中的每一列? (Postgres具体)
- sql-server-2008 – 使用文件流存储图像和缩略图是个好主意
- sql-server – 分区键是否也必须是主键的一部分?
- 在tsql中,tablename(1)是什么意思
- MySQL 5.7 create VIEW or FUNCTION or PROCEDURE
- shell脚本监控mysql主从状态
- SQL Server数据库开发的二十一条法则
- sql-server – MS SQL Server中的数百个休眠进程会降低性能
