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 个变量用于调用函数,并且该函数(第 3 方)插入一条新记录。

这行得通。但是,上面的 CLOB 插入存在问题。如果多行彼此快速插入(例如:从 csv 导入,使用 sql 开发人员“插入”方法“或 WebMethod;我假设插入发生在同一事务中),则 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

此问题是由 3rd 方功能中的错误引起的。

于 2012-12-10T09:25:19.077 回答