如何使用PL SQL函数从xmltype数据生成xml报告
我是pl/sql和xml方面的新手如何使用PL SQL函数从xmltype数据生成xml报告,xml,oracle,plsql,Xml,Oracle,Plsql,我是pl/sql和xml方面的新手 <?xml version="1.0"?> <Company> <Employee> <Programmer> <Salary>2000</Salary> <Facilities> <Car>bmw</Car> <
<?xml version="1.0"?>
<Company>
<Employee>
<Programmer>
<Salary>2000</Salary>
<Facilities>
<Car>bmw</Car>
<Apartment>1</Apartment>
<Bonus>2000</Bonus>
</Facilities>
</Programmer>
<Manager>
<Salary>1500</Salary>
<Facilities>
<Car>ford</Car>
<Room>1</Room>
<Bonus>1500</Bonus>
</Facilities>
</Manager>
</Employee>
</Company>
因此,如何编写这样的函数。请提供帮助。谢谢您,返回部分XML文档不需要PL/SQL函数。您可以使用
XQuery
功能直接选择XML文档的部分。这也意味着您仍然可以围绕XQuery
SELECT
创建PL/SQL函数,如果您想隐藏查询本身:
CREATE TABLE XMLTEST (xmlcol XMLTYPE);
INSERT INTO XMLTEST (xmlcol) VALUES ('<?xml version="1.0"?>
<Company>
<Employee>
<Programmer>
<Salary>2000</Salary>
<Facilities>
<Car>bmw</Car>
<Apartment>1</Apartment>
<Bonus>2000</Bonus>
</Facilities>
</Programmer>
<Manager>
<Salary>1500</Salary>
<Facilities>
<Car>ford</Car>
<Room>1</Room>
<Bonus>1500</Bonus>
</Facilities>
</Manager>
</Employee>
</Company>');
COMMIT;
SELECT XMLQUERY('//Programmer' PASSING xmlcol RETURNING CONTENT)
FROM XMLTEST;
<Programmer>
<Salary>2000</Salary>
<Facilities>
<Car>bmw</Car>
<Apartment>1</Apartment>
<Bonus>2000</Bonus>
</Facilities>
</Programmer>
创建表XMLTEST(xmlcol XMLTYPE);
插入XMLTEST(xmlcol)值('
2000
宝马
1.
2000
1500
河流浅水处
1.
1500
');
犯罪
选择XMLQUERY(“//程序员”传递xmlcol返回内容)
从XMLTEST;
2000
宝马
1.
2000
注意:由于QXuery表达式“//Programmer”中使用了双斜杠,上述查询将提取任何称为“程序员”的标记。如果层次结构是固定的,或者您只想检索下面列出的任何程序员,那么您必须在XQuery中相应地指定该路径:
SELECT XMLQUERY('/Company/Employee/Programmer'
PASSING xmlcol RETURNING CONTENT)
FROM XMLTEST;
<Programmer>
<Salary>2000</Salary>
<Facilities>
<Car>bmw</Car>
<Apartment>1</Apartment>
<Bonus>2000</Bonus>
</Facilities>
</Programmer>
选择XMLQUERY('/Company/Employee/Programmer'
传递(返回内容)
从XMLTEST;
2000
宝马
1.
2000
谢谢@Tim Biegeleisen。我将xml存储为xmltype列。谢谢@Tim Biegeleisen。您能给我看一些代码示例吗。谢谢您使用的是哪个版本的Oracle RDBMS?我使用的是12.1.0.2,它运行良好。在以前的版本中,您可能需要显式转换为XMLTYPE
,请尝试在insert的周围包装一个XMLTYPE():insert-INTO-XMLTEST(xmlcol)值(XMLTYPE(“…”)关于检索关系数据并将其放入XML文档的问题,是的,您可以这样做。但这取决于您是否希望完全从关系生成XML,只需用关系列替换salary,在这种情况下,您必须加入表,或者您是否希望实际更新/替换salary。我强烈建议你看一看能带你看完所有场景的,或者你可以创建一个带有详细解释的新问题。仍然是相同的错误吗?你能试试SQL*Plus吗?它在LiveSQL上运行良好,这是我目前手头唯一的环境:是的,它可以。我上面提到的文档是针对11g的,此外,您声明INSERT
语句抛出了一个错误,而不是XQuery。我建议你看一下文档,你应该在里面找到你需要的答案。正如我上面告诉你的,这取决于你想做什么。但由于这是一个完全不同的问题,请创建一个新的问题,并进行详细解释,包括数据模型和数据的外观。谢谢,
SELECT XMLQUERY('/Company/Employee/Programmer'
PASSING xmlcol RETURNING CONTENT)
FROM XMLTEST;
<Programmer>
<Salary>2000</Salary>
<Facilities>
<Car>bmw</Car>
<Apartment>1</Apartment>
<Bonus>2000</Bonus>
</Facilities>
</Programmer>