我在存储过程中有以下片段。该过程是从插入触发器调用的。
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 的问题,而不是程序的问题!!!