繁体   English   中英

将pl / sql中超过4000个字符的Varchar转换为XMLTYPE

[英]Converting from a Varchar in pl/sql which is more than 4000 characters to a XMLTYPE

我遇到了一个问题,我需要将超过4000个字符的字符串转换为XMLTYPE。 我试过用

XMLTYPE.CREATEXML("MY STRING")
XMLTYPE("MY STRING")

在这两种情况下,我都得到了'String literal too long ..'错误。

我们只能传递xml格式的数据来创建XMLTYPE实例,并使用CLOB传递字符串值,然后使用EXTRACTVALUE函数来检索数据

DECLARE 
str CLOB;
x XMLTYPE;
y CLOB:='<TEXT>MY STRING</TEXT>';
BEGIN
x:= XMLTYPE.CREATEXML(y);
select to_clob(extractvalue(x,'/TEXT')) into str FROM DUAL;
dbms_output.put_line(str);
END;

有关更多实际示例,请查看XMLTYPE示例XMLTYPE Documantation链接

如果要选择作为Varchar返回的整个XML类型,可以执行以下操作。 在这里,我选择整个xml值。

DECLARE 
str VARCHAR2(4000);
x XMLTYPE;
y CLOB:='<TEXT>MY STRING</TEXT>';
BEGIN
x:= XMLTYPE.CREATEXML(y);
str := x.EXTRACT('/').getstringval();
dbms_output.put_line(str);
END;

输出: <TEXT>MY STRING</TEXT>

您可以深入查看子节点,如下所示。

DECLARE 
str VARCHAR2(4000);
x XMLTYPE;
y CLOB:='<PARENT><TEXT>MY STRING</TEXT></PARENT>';
BEGIN
x:= XMLTYPE.CREATEXML(y);
str := x.EXTRACT('PARENT/TEXT').getstringval();
dbms_output.put_line(str);
END;

输出: <TEXT>MY STRING</TEXT>

最后,如果你只想要你可以做的价值。

DECLARE 
str VARCHAR2(4000);
x XMLTYPE;
y CLOB:='<PARENT><TEXT>MY STRING</TEXT></PARENT>';
BEGIN
x:= XMLTYPE.CREATEXML(y);
str := x.EXTRACT('PARENT/TEXT/text()').getstringval();
dbms_output.put_line(str);
END;

输出: MY STRING

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM