不良データの場合であることが判明しました。テスト DB のデータが破損しており、CRLF ではなく LF しかありませんでした。
ジゴ :-)
ご協力ありがとうございます
ところで、私のコード例では、like 関数の代わりに INSTR 関数を使用しました。ユーザーが検索するテキストに % を入力すると、like ステートメントが台無しになる可能性があります。 (私のデータでは % が有効な文字である可能性があるため、それらを除外することはできません)
最終的なコードは次のとおりです:
PROCEDURE FindReplaceResponsibilities (iOldResponsibilities IN JP_JOB_FAMILIES.RESPONSIBILITIES%TYPE,iNewResponsibilities IN JP_JOB_FAMILIES.RESPONSIBILITIES%TYPE,oNumRowsUpdated OUT INTEGER
プレ>)は
BEGNoNumRowsUpdated :=0;
SAVEPOINT sp_jf_findrepresp; -- 検索する古いテキストがない場合、 -- すべての行の最後に新しいテキストを追加します。 -- それ以外の場合は、古いテキストをすべて新しいテキストに置き換えます。 iNewResponsibilities; oNumRowsUpdated :=SQL%ROWCOUNT; ELSE UPDATE JP_JOB_FAMILIES SET RESPONSIBILITIES =REPLACE(RESPONSIBILITIES, iOldResponsibilities, iNewResponsibilities) WHERE dbms_lob.instr(RESPONSIBILITIES, iOldResponsibilities)> 0; oNumRowsUpdated :=SQL%ROWCOUNT; END IF;戻る;他が始まるときの例外 oNumRowsUpdated :=-1; sp_jf_findrepresp にロールバックします。 dbms_output.put_line('エラー:' || sqlerrm);戻る; END;コード> プレ>
END FindReplaceResponsibilities;
私のアプリケーションのコードは問題ありませんでした:
public int FindReplaceJobFamilyResponsibilities(String oldResponsibilities, String newResponsibilities, IDbTransaction transaction =null){ using (IDbCommand cmd =this._dataHelper.GetStoredProcedure(_connectionString, "JP_JOBFAM_PKG.FindReplaceResponsibilities", true)) { _dataHelper.SetParameterValue(cmd 、「iOldResponsibilities」、oldResponsibilities); _dataHelper.SetParameterValue(cmd, "iNewResponsibilities", newResponsibilities); DataHelperBase.VerifyParameters(cmd.Parameters, false); base.SetExecuteConnection(cmd, トランザクション); _dataHelper.ExecuteNonQuery(cmd); Convert.ToInt32(_dataHelper.GetParameterValue(cmd, "oNumRowsUpdated")); を返します。 }}コード> プレ>