我們的DBA要求我們從一組關聯數組中返回存儲過程中的所有表格數據,而不是使用我在Web上大多數示例中看到的引用遊標。他說,這是因爲Oracle以這種方式做事要快得多,但對我來說這似乎不直觀,因爲數據需要循環兩次,一次在存儲過程中,另一次在應用程序中進行處理。此外,值通常需要從其本地類型轉換爲varchar,以便它們可以存儲在數組中,然後在應用程序端進行回滾。使用這種方法也使得使用orm工具變得困難,因爲他們似乎在大多數情況下都需要引用遊標。Oracle存儲過程,返回引用遊標與關聯數組
的存儲過程的一個例子是下面的:
PROCEDURE sample_procedure (
p_One OUT varchar_array_type,
p_Two OUT varchar_array_type,
p_Three OUT varchar_array_type,
p_Four OUT varchar_array_type
)
IS
p_title_procedure_name VARCHAR2(100) := 'sample_procedure';
v_start_time DATE :=SYSDATE;
CURSOR cur
IS
SELECT e.one, e.two, e.three, e.four FROM package.table
WHERE filter='something';
v_counter PLS_INTEGER := 0;
BEGIN
FOR rec IN cur LOOP
BEGIN
v_counter := v_counter + 1;
p_One(v_counter) := rec.one;
p_Two(v_counter) := rec.two;
p_Three(v_counter) := rec.three;
p_Four(v_counter) := rec.four;
END;
END LOOP;
END;
光標用於填充爲每列一個陣列返回。我試圖找到支持他聲稱這種方法更快但卻無法這樣做的信息。任何人都可以填寫我爲什麼他希望我們(.net開發人員)以這種方式編寫存儲過程嗎?
謝謝。多麼好,詳細的答案!如果可以的話,我會給你兩張票。 – zaq 2012-03-09 20:47:54