2012-10-31 25 views
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的問題,而不是程序!

+0

爲什麼你需要在INSERT觸發器中執行SELECT?你不能直接引用插入的數據嗎? –

+0

沒有。觸發器只獲得一個「id」,在其上查找附加信息(SELECT)。觸發器運行的表由WebMethod(例如消息傳遞)填充,然後觸發器中調用的過程將數據+附加數據從查找移至最終目標。並非所有接收的行都被傳送。無論如何,這與這個問題無關。 –

+0

你可以直接用INSERT語句(而不是通過.csv導入/ WebMethod)來測試它嗎? –

回答

0

此問題是由第三方功能中的錯誤引起的。