2015-12-15 66 views
-2

我有一個.sql文件,它有插入查詢。我將不得不更改插入查詢(基本上所有ID都需要在查詢中重置),然後執行。如何通過SQL過程更新.sql文件?

我已經嘗試閱讀.sql文件,並嘗試獲取身份證,但在這裏我不確定當時的舊身份證是什麼。我如何找到舊的ID並用新的替換?

任何人都可以建議我怎麼做到這一點?

這是我的Java和PL/SQL代碼:

ArrayDescriptor des = ArrayDescriptor.createDescriptor("OFSA.ARRAY_TABLE", con); 
ARRAY array_to_pass = new ARRAY(des,con,array); 
st = con.prepareCall("call OFSA.proc_test(?,?,?)"); 
st.setArray(1, array_to_pass); 
st.registerOutParameter(2, Types.INTEGER); 
st.registerOutParameter(3,OracleTypes.ARRAY,"OFSA.ARRAY _TABLE"); 
st.execute(); 

PLSQL代碼:

CREATE OR REPLACE PROCEDURE PROC_TEST(P_ARRAY IN ARRAY_TABLE, 
            LEN  OUT NUMBER, 
            OP_ARRAY OUT ARRAY_TABLE) AS 
V_COUNT NUMBER; 
BEGIN 
    OP_ARRAY := NEW ARRAY_TABLE(); 
    OP_ARRAY.EXTEND(50); 
    LEN := P_ARRAY.COUNT; 

    FOR I IN 1 .. P_ARRAY.COUNT LOOP 

在這裏,我將要取代舊的標識與新的ID。但查詢是在一個字符串中。我不知道我的ID的確切位置..有些查詢也可以有多個ID。在這裏我需要找到id並用新的替換。

+0

你爲什麼要這樣做?將該ID作爲參數傳遞給存儲過程不是更好嗎? –

+0

你的dbms是什麼? ,你也可以顯示你的代碼? – Japongskie

+0

在這個時候,我不確定在.sql中有多少個id將會存在......它將取決於特定於應用程序的對象。我不知道有多少個ID會在那裏。 – pooja

回答

0

幾個選項:

不要使用存儲過程

你的問題被標記的Java。只需在Java中創建所需的插入查詢並直接運行它們,完全避免了該過程。存儲過程主要用於您想要輕鬆重新運行相同代碼的情況。如果你每次都需要不同的代碼,程序可能不適合你。

不要硬編碼的ID在存儲過程中

相反,這些ID傳遞到以某種方式的過程。

如果插入語句作用於單個ID,則可以簡單地將其作爲參數傳遞,然後在查詢中使用它。

如果過程需要使用ID列表,可能有一種方法可以傳入一個數組(取決於您的數據庫)。另一種選擇是將ID存儲在表中,並使該過程使用此表。然後,您可以在調用過程之前更新表格。

+0

感謝您的快速回復!插入前我將不得不更改ID。我該怎麼做? – pooja

+0

讀取.sql文件並將其強制轉換爲字符串數組並將該數組傳遞給過程。在過程中,我試圖讀取每個查詢,並嘗試重置ID並執行。這我怎麼做。但我沒有得到如何重置程序中的ID。 – pooja

+0

@pooja,請更新您的問題與其他細節,包括*爲什麼你需要這樣做。*仍然不清楚。 – 2015-12-15 07:03:47