2

ストアド プロシージャに次のスニペットがあります。プロシージャーは挿入トリガーから呼び出されます。

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の問題です!!!

4

1 に答える 1

0

この問題は、サードパーティの機能のバグが原因で発生しました。

于 2012-12-10T09:25:19.077 に答える