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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20186838/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 02:06:24  来源:igfitidea点击:

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

sqloracle

提问by user3030396

I came across a problem where I need to convert a string of more than 4000 characters to a XMLTYPE. I tried using

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

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

In both cases, I got 'String literal too long..' error.

在这两种情况下,我都收到了“字符串文字太长..”错误。

回答by psaraj12

We can pass only the data in xml format for creating an XMLTYPE instance and use CLOB to pass the string value and then use the EXTRACTVALUE Function to retreive the data

我们可以只传递 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;

Please check the links XMLTYPE Examplesand XMLTYPE Documantationfor more practical examples

请查看链接XMLTYPE 示例XMLTYPE 文档以获得更多实用示例

回答by Adam

If you want to select the whole XML type returned as a Varchar you can doing the following. Here I'm selecting the whole xml value.

如果您想选择作为 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;

OUTPUT:<TEXT>MY STRING</TEXT>

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

You can drill down to child nodes also like the following.

您也可以向下钻取到子节点,如下所示。

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;

OUTPUT:<TEXT>MY STRING</TEXT>

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

Finally if you just want the value you can do.

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

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;

OUTPUT:MY STRING

输出:MY STRING