2
我在存儲過程中有以下代碼片段。該過程由插入觸發器調用。Oracle過程:併發和CLOB變量
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個變量在呼叫中使用的函數和函數(第三方)插入一個新的記錄。
This Works。但是,上面的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;
請注意,所有其他無論是否進行COMMIT,基於v_id選擇的字段都具有正確的值!所以這是CLOB的問題,而不是程序!
爲什麼你需要在INSERT觸發器中執行SELECT?你不能直接引用插入的數據嗎? –
沒有。觸發器只獲得一個「id」,在其上查找附加信息(SELECT)。觸發器運行的表由WebMethod(例如消息傳遞)填充,然後觸發器中調用的過程將數據+附加數據從查找移至最終目標。並非所有接收的行都被傳送。無論如何,這與這個問題無關。 –
你可以直接用INSERT語句(而不是通過.csv導入/ WebMethod)來測試它嗎? –