我需要優化PL/SQL函數,目前像上建立光標:如何基於陣列
CREATE OR REPLACE FUNCTION tkt_get_underlying(n_input number)
RETURN t_table_of_number
IS
ret t_table_of_number;
CURSOR c IS SELECT n_number FROM t_table WHERE n_prop_1=n_input OR n_prop_2=n_input OR n_prop_3=n_input;
BEGIN
ret := t_table_of_number();
OPEN c;
FETCH c BULK COLLECT INTO ret;
CLOSE c;
RETURN ret;
END;
我希望能夠給數組作爲參數,但是,我不不知道如何構建我的遊標以獲取數組。我想我可以使用IN
聲明,但可以幫我解決這個問題嗎?
編輯:
據Justin Cave提供的解決方案,它會成爲:
CREATE OR REPLACE FUNCTION tkt_get_underlying(n_inputs t_table_of_number)
RETURN t_table_of_number
IS
ret t_table_of_number;
CURSOR c IS SELECT n_number FROM t_table WHERE n_prop_1 IN (SELECT column_value FROM TABLE(n_inputs))
OR n_prop_2 IN (SELECT column_value FROM TABLE(n_inputs))
OR n_prop_3 IN (SELECT column_value FROM TABLE(n_inputs));
BEGIN
ret := t_table_of_number();
OPEN c;
FETCH c BULK COLLECT INTO ret;
CLOSE c;
RETURN ret;
END;
然而,多個SELECT column_value FROM TABLE(n_inputs)
減慢整個功能。我該如何改進?
更好的你想'n_input'值的集合來傳遞?或者你在找別的東西嗎? – 2012-08-07 15:44:07
是的,我想通過一個n_input集合 – 2012-08-07 16:18:40
什麼是現有查詢的查詢計劃?新查詢的查詢計劃是什麼? 「減慢整個功能」究竟意味着什麼?也就是說,如果原始函數花費了1秒來執行單個輸入,那麼當輸入是N個元素時,修改後的函數是否需要2 * N秒才能執行? 't_table'中有多少行?哪些索引可用?你是否事先(粗略地)知道傳入的數組中有多少元素? – 2012-08-07 16:27:05