好的,我已經在oracle中編寫了一個基本函數來根據客戶端ID和指定的日期返回當前的worker。Oracle SQL函數參數的多個輸入
它按預期工作。
FUNCTION get_worker_new_test (p_id IN VARCHAR2, p_date IN DATE, w_type IN
VARCHAR2) RETURN VARCHAR2 IS
CURSOR c1 IS
SELECT
O_RELATIONSHIPS.ID
FROM o_relationships
WHERE rel_source_per_gro_id = p_id
AND rel_rty_code in (w_type)
AND p_date BETWEEN rel_start_date AND NVL(rel_end_date, SYSDATE)
ORDER BY rel_start_date DESC;
l_name VARCHAR2(70) ;
BEGIN
OPEN c1;
FETCH c1 INTO l_name;
CLOSE c1;
RETURN l_name;
END;
因此,舉例來說,像這樣的查詢:
SELECT
CLIENT,
get_worker_new_test(CLIENT,sysdate,'WORKER')
FROM TABLE
將返回類似:
客戶端1 |一個工人
但是,我想知道是否有可能要求函數返回來自許多不同的工人類型的最新工人。
因此,例如,我會寫這樣的查詢:
SELECT
CLIENT,
get_worker_new_test(CLIENT,sysdate,'WORKER,CLERK,MANAGER')
FROM TABLE
而且,它還將返回:
客戶端1 |經理人
如果分配的最新員工類型是經理。我想我需要一個將字符串拆分爲單獨條目的函數,但即使如此,我也不確定是否有更好的方法來處理它。任何意見或指導將不勝感激。
謝謝。
爲什麼需要一個功能呢?當你需要加入時,爲什麼不加入?不是那些簡單地隱藏SQL查詢的功能粉絲。一個問題是你面對的是什麼,你總是需要考慮用戶謂詞的不斷增長的可能性,並堅持你的功能。我不會觸及性能問題 – tbone
我通常會使用連接,但我發現這是我不斷在我的報告中使用的信息。該功能適用於我和其他同事,用戶無法訪問它們。 - 如果除了函數之外還有其他建議,我很樂意聽到他們的消息,但是我寫的大概90%的報告通常都需要某種類型的工作者信息(工人,評論員,同事等) 。 – bawpie
[動態SQL](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/dynamic.htm) – GriffeyDog