Oracle VIEW - 列中超过4000个字节

时间:2013-05-14 09:55:10

标签: sql oracle

我使用SQL Satement的这一部分从N:N关系中获取信息。

目标是使用以下列的视图:“ STRING1,STRING2,STRING3 ”。这工作正常,但我有时在列中超过4000字节。

 (SELECT
     (RTRIM(XMLAGG(xmlelement(X, TABLE1.STRING||',') order by TABLE1.STRING).extract('//text()'),','))
    FROM
        STRING_HAS_TABLE1
    JOIN TABLE1 STRING_HAS_TABLE1.STRING_ID = TABLE1.ID
    WHERE
      STRING_HAS_TABLE1.USER_ID = X.ID) AS STRINGS,

Oracle抛出“缓冲区溢出”。我认为问题是视图中的columntype:VARCHAR2(4000)。

错误:ORA 19011 - 字符串缓冲区为小

在不改变整个应用程序逻辑的情况下处理此问题的任何想法?

1 个答案:

答案 0 :(得分:2)

这是在数据类型之间隐式转换的问题。您可以通过添加CLOB电话,在修剪前将其视为getClobVal()来解决问题:

SELECT RTRIM(XMLAGG(xmlelement(X, TABLE1.STRING||',')
    order by TABLE1.STRING).extract('//text()').getClobVal(),',')
FROM ...

RTRIM documentation显示了它接受的类型,并且由于未列出XMLTYPE,这意味着它必须进行隐式转换,显然是VARCHAR2。 (这同样适用于其他TRIM函数)。

但它接受CLOB,因此明确转换为CLOB意味着RTRIM不会隐式转换为太小的类型。