如何在ORACLE中的VARCHAR中转换XMLTYPE?

时间:2016-01-27 13:58:07

标签: oracle

我在ORACLE中的表(TRANSACTION)中有两列是XMLTYPE(XML_IN和XML_OUT)。我的程序不起作用,因为我不知道如何将它们转换为VARCHAR或其他东西(我只是认为这是错误)。我的程序是:

PROCEDURE SEARCH_XML
(
    P_ID_TRANSACTION IN TRANSACTION.ID_TRANSACTION%TYPE,

    P_CURSOR OUT T_CURSOR
)
IS
BEGIN

    OPEN P_CURSOR FOR

    SELECT T.XML_IN, T.XML_OUT
    FROM TRANSACTION T
    WHERE T.ID_TRANSACTION = P_ID_TRANSACTION;

END SEARCH_XML;

当我在VisualStudio2008中调用此过程时出现错误消息:“遇到不支持的oracle数据类型USERDEFINED”。知道这是如何工作的?

1 个答案:

答案 0 :(得分:26)

XMLType有两种方法:getStringVal()getClobVal(),它们会将XML结构转换为字符串表示形式(分别为VARCHAR2CLOB)。除非您知道XML输出总是少于4000个字符(字节),否则您可能希望使用getClobVal(),如下所示:

PROCEDURE SEARCH_XML
(
    P_ID_TRANSACTION IN TRANSACTION.ID_TRANSACTION%TYPE,

    P_CURSOR OUT T_CURSOR
)
IS
BEGIN
  OPEN P_CURSOR FOR
    SELECT T.XML_IN.getClobVal() AS XML_IN,
           T.XML_OUT.getClobVal() AS XML_OUT
    FROM TRANSACTION T
    WHERE T.ID_TRANSACTION = P_ID_TRANSACTION;
END SEARCH_XML;