带有PL/SQL变量的XPath

带有PL/SQL变量的XPath,sql,xpath,plsql,Sql,Xpath,Plsql,作为一个非常熟悉复杂sql命令的新手,我想执行两个XPath数据库查询,其中第二个命令使用第一个命令的结果: declare version VARCHAR2(256); document VARCHAR2(256); begin select ID_VERSION into version from VERSIONTABLE where extract(VERSION_XML, '//p:contract[@id="contract-001"]', 'xmlns:p="http://www.

作为一个非常熟悉复杂sql命令的新手,我想执行两个XPath数据库查询,其中第二个命令使用第一个命令的结果:

declare
version VARCHAR2(256);
document VARCHAR2(256);
begin

select ID_VERSION into version from VERSIONTABLE where extract(VERSION_XML, '//p:contract[@id="contract-001"]', 'xmlns:p="http://www.foo.com/v1"').getClobVal() IS NOT NULL;
select ID_DOCUMENT into document from DOCUMENTTABLE where extract(DOCUMENT_XML, '//p:content[@ref='$version']', 'xmlns:p="http://www.foo.com/v1"').getClobVal() IS NOT NULL;

end;
/
第一个命令始终只返回一个
ID\u版本
。因此,我想打印
文档

问题:如何在第二个命令中正确地包含
version
?执行上述命令时,它在
“$version”
的代码位置输出以下错误:

PLS-00181: unsupported preprocessor directive '$VERSION' [SQL State=65000, DB Errorcode=6550] 

谢谢大家!

PL/SQL中的字符串连接运算符是
| |
——因此您需要执行以下操作:

select ID_DOCUMENT
  into document
  from DOCUMENTTABLE
  where extract(DOCUMENT_XML,
                '//p:content[@ref=' || version || ']', 
                'xmlns:p="http://www.foo.com/v1"').getClobVal() IS NOT NULL;

分享并享受。

感谢您的回答。它起了部分作用:前一个错误当然消失了,但出于某种原因,它找不到任何数据:如果我尝试
version:='version-123
选择ID_DOCUMENT to DOCUMENT from DOCUMENTTABLE where extract(DOCUMENT_XML,//p:content[@ref='| | | |'],'xmlns:p='http://www.foo.com/v1“)。getClobVal()不为NULL错误为
ORA-01403:未找到数据
。但是,如果直接插入字符串,则会有数据。你知道原因吗?提前谢谢!