私は次のようなOracleテーブルを持っています
CREATE TABLE T_TEST(
INFO1 VARCHAR2(2000 CHAR),
INFO2 VARCHAR2(2000 CHAR),
INFO CLOB)
このテーブルにデータを挿入するために、空のCLOBを返す関数が1つあります。
function Insert_TEST(in_infotext1 in T_TEST.info1%type := null,
in_infotext2 in T_TEST.info2%type := null,)
return T_TEST.info%type
is
l_info T_TEST.info%type;
begin
insert into T_TEST
( INFO1,
INFO2,
info,)
values ( in_infotext1,
in_infotext2,
empty_clob())
returning info into l_info;
return l_info;
end;
この関数を呼び出すために、次のSQLを使用しています。
declare
myinfo clob;
begin
myinfo := Insert_TEST('Info1', 'Info2');
DBMS_LOB.OPEN(myinfo, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.WRITE(myinfo,14,1,'My Information');
DBMS_LOB.CLOSE(myinfo);
COMMIT;
end;
このSQLはSQLDeveloperから完全に機能しますが、org.springframework.jdbc.core.JdbcTemplateを使用してこのSQLを実行しようとすると、プログラムが無限にループします。私のJavaコーディングは以下の通りです
OracleConnectionPoolDataSource dataSource = new OracleConnectionPoolDataSource();
dataSource.setURL("jdbc:oracle:thin:@localhost:1521:orcl");
dataSource.setUser("test");
dataSource.setPassword("test");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String query =
"declare "+
" myinfo clob; "+
"begin "+
" myinfo := Insert_TEST('Info1', 'Info2');"+
" DBMS_LOB.OPEN(myinfo, DBMS_LOB.LOB_READWRITE); "+
" DBMS_LOB.WRITE(myinfo,14,1,'My Information'); "+
" DBMS_LOB.CLOSE(myinfo); "+
" COMMIT; "+
"end;";
jdbcTemplate.execute(query);
ありがとう