overcome 32k limit when inserting oracle clob IN parameter using spring StoredProcedure

后端 未结 3 1770
时光说笑
时光说笑 2021-01-27 06:03

Environment: oracle 11g, spring-jdbc-3.2.2-RELEASE.jar, JDK 1.7, Oracle UCP driver.

I have a stored procedure which insert record to a table with CLOB column. The SP has

相关标签:
3条回答
  • 2021-01-27 06:16

    The limit for CLOB in Oracle is 176TB. 32KB is limit for VARCHAR. Your code somewhere uses implicit conversion from VARCHAR to CLOB. In Oracle CLOB must be OUTPUT paramater - even if you are inserting it. Oracle's API assumes that you create empty_clob() on database side, then you return a LOB locator to aplication. The application then uses this LOB locator as filehandle.

    This behaviour is different from other databases.

    0 讨论(0)
  • 2021-01-27 06:22

    PL/SQL has a hard limit of 32k chars if you send the data as a character string. If the parameter is a CLOB you can first create a temp LOB, fill it up with data and then call your PL/SQL procedure with the CLOB object.

    0 讨论(0)
  • 2021-01-27 06:29

    It depend on your version of Oracle:

    • < 10.1: you can put the SetBigStringTryClob property to true in your DriverManager.
    • >= 10.1: you can use OraclePreparedStatement.setStringForClob doc here.

    Also, this article may help you.

    0 讨论(0)
提交回复
热议问题