我在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”。知道这是如何工作的?
答案 0 :(得分:26)
XMLType
有两种方法:getStringVal()
和getClobVal()
,它们会将XML结构转换为字符串表示形式(分别为VARCHAR2
和CLOB
)。除非您知道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;