ストアド プロシージャに次のスニペットがあります。プロシージャーは挿入トリガーから呼び出されます。
v_ProdName VARCHAR2(250);
v_ID VARCHAR2(50);
v_Clob CLOB;
-- ....
SELECT
MY_TABLE.ID,
MY_TABLE.PRODNAME,
MY_TABLE.MY_CLOB
INTO
v_ID,
v_ProdName,
v_Clob
FROM
-- ...
その後、これらの 3 つの変数が関数の呼び出しで使用され、その関数 (サード パーティ) が新しいレコードを挿入します。
これは機能します。ただし、上記の CLOB 挿入には問題があります。複数の行が次々にすばやく挿入される場合 (例: SQL 開発者の「挿入」メソッドまたは WebMethod を使用して csv からインポートします。挿入は同じトランザクションで行われると想定しています)、CLOB はすべての行に対して最初に挿入された行の値を持ちます。 (例: id、ProdName) は正しい値を持っています。
したがって、Clob が何らかの形でキャッシュされているようです。本当?どうすればその動作を修正できますか?
編集:
例:
DECLARE
-- ... variables
v_id varchar2(15);
BEGIN
-- assign values to vars, one of them is an ID on which CLOB is selected
-- in the procedure
v_id := '754-56-4';
my_procedure(v_id, args);
-- if this commit in un-commented, it works as expected.
-- eg. the 2 inserted rows have different values for the clob field
-- COMMIT;
-- assign other values to vars especially different id
-- -> result should have a different value in CLOB field
v_id := '5356-97-6';
my_procedure(v_id, args);
END;
v_id に基づいて選択された他のすべてのフィールドは、COMMIT が行われたかどうかに関係なく、正しい値を持つことに注意してください。したがって、プロシージャではなくCLOBの問題です!!!