有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有clob作为in参数的java oracle过程(大文本)

在尝试使用过程将大型文本对象插入oracle数据库时,我遇到了一个问题

我的程序必须向oracle数据库中插入数千个项目,由于逐个插入的性能问题,我编写了一个oracle过程并一次插入所有项目

伊巴蒂斯:

<parameterMap id="EttAttrCall" class="java.util.Map">
        <parameter property="ettAttrLst" jdbcType="CLOB" javaType="java.lang.String" mode="IN"/>
        <parameter property="pjtId" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
        <parameter property="createUser" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/>
    </parameterMap>
    <procedure id="insertTmpEttAttr" parameterMap="EttAttrCall">
       { call INS_TMP_ETT_ATTR(?,?,?)}  
    </procedure>

oracle程序:

create or replace
PROCEDURE INS_TMP_ETT_ATTR
(
  ettAttrLst IN CLOB,  
  pjtId IN VARCHAR2,
  createUser IN VARCHAR2
) 

如果数据长度不超过300万个字符,一切正常,但如果超过该数字,oracle将抛出此异常: ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小

我试图在互联网上搜索,但没有多少有用的信息。因此,任何建议或想法都将受到高度赞赏


共 (2) 个答案

  1. # 1 楼答案

    CLOB的限制是4G,所以我猜您正在处理的是一个在PL/SQL代码中超过的Varchar2限制

    您必须查看错误堆栈中的行号。通常Oracle提供额外的ORA-06512错误,这些错误指示这些PL/SQL对象和错误堆栈的行号

    如果您使用的是多字节字符,这只是一个粗略的猜测:请注意是否以字节(默认值)或字符为单位指定Varchar2大小。varchar2的限制为32767字节(不是字符!)

    在下面的评论后编辑:

    查看this question以了解如何执行批插入的示例

  2. # 2 楼答案

    我试图在blob中写入字符串时遇到此错误,因此我将其转换为字节[],如下所示:

     byte[] bytes = content.getBytes();//conntent is a String contains more than 100 line date