Apache Derby データベースにデータを保存および取得するアプリケーション (Apache Cocoon) があります。Derby はサーバー モードで実行されており、バージョンは 10.12.1.1 です。
クエリ、挿入、および更新は問題なく実行されますが、マージ ステートメントを実行すると、「ネットワークからの読み取り中にデータが不十分です - 最小値が 21,272 バイトであると予想され、0 バイトしか受信されませんでした。接続が終了しました。 "
Derby ログの情報。
Wed Jan 11 12:27:52 CET 2017 Thread[DRDAConnThread_5,5,main] (DATABASE = /appl2/derby/STEAD1_B2B_SCHEMA), (DRDAID = ��������.����-4326268907908754457{5}), Execution failed because of Permanent Agent Error: SVRCOD = 40; RDBNAM = /appl2/derby/STEAD1_B2B_SCHEMA; diagnostic msg = null
Wed Jan 11 12:27:52 CET 2017 : Execution failed because of Permanent Agent Error: SVRCOD = 40; RDBNAM = /appl2/derby/STEAD1_B2B_SCHEMA; diagnostic msg = null org.apache.derby.impl.drda.DRDAProtocolException: Execution failed because of Permanent Agent Error: SVRCOD = 40; RDBNAM = /appl2/derby/STEAD1_B2B_SCHEMA; diagnostic msg = null at org.apache.derby.impl.drda.DRDAProtocolException.newAgentError(Unknown Source) at org.apache.derby.impl.drda.DRDAConnThread.sendUnexpectedException(Unknown Source) at org.apache.derby.impl.drda.DRDAConnThread.handleException(Unknown Source) at org.apache.derby.impl.drda.DRDAConnThread.run(Unknown Source)
Wed Jan 11 12:27:52 CET 2017 : null
java.lang.NullPointerException
at org.apache.derby.impl.drda.DDMWriter.maxEncodedLength(Unknown Source)
at org.apache.derby.impl.drda.DDMWriter.writeString(Unknown Source)
at org.apache.derby.impl.drda.DRDAConnThread.writeSQLCAGRP(Unknown Source)
at org.apache.derby.impl.drda.DRDAConnThread.writeSQLCARD(Unknown Source)
at org.apache.derby.impl.drda.DRDAConnThread.writeSQLCARDs(Unknown Source)
at org.apache.derby.impl.drda.DRDAConnThread.processCommands(Unknown Source)
at org.apache.derby.impl.drda.DRDAConnThread.run(Unknown Source)
SQL マージステートメントは次のとおりです。
merge into octl as trg
using octl_external as src
on ( trg.content_type = src.content_type
and trg.distr_channel= src.distr_channel
and trg.object_id = src.object_id
and trg.localisation = src.locale
and trg.type = src.type
)
when not matched then
insert ( content_type, distr_channel, object_id, localisation, type, masterlastmodified_ts, lastmodified_ts)
values ( src.content_type, src.distr_channel, src.object_id, src.locale, src.type, src.lastmodified_ts, src.lastmodified_ts)
when matched then
update set trg.masterlastmodified_ts = src.lastmodified_ts
, trg.lastmodified_ts = src.lastmodified_ts
このマージ ステートメントは、Squirrel の SQL コンソールでテストされ、正常に動作します。
要約: 他の sql-statements は Cocoon から正常に動作します。merge ステートメントは Squirrel では正常に動作しますが、Cocoon からは動作しません。
この動作の原因は何ですか?