請幫我從這種情況
我必須創建一個函數來獲取經理的名字對於一個給定的僱員。 (我試圖加入emp表來自己做這個,但不知道。)另外,我需要編寫一個SQL select語句,它使用該函數生成一個僱員編號和名稱以及他們的經理姓名列表
謝謝
請幫我從這種情況
我必須創建一個函數來獲取經理的名字對於一個給定的僱員。 (我試圖加入emp表來自己做這個,但不知道。)另外,我需要編寫一個SQL select語句,它使用該函數生成一個僱員編號和名稱以及他們的經理姓名列表
謝謝
Filip's function是不是爲這是從EMP表的查詢調用的函數的最佳解決方案。該表具有MGR屬性,應該傳遞給該函數。
CREATE FUNCTION fn_get_manager(p_mgr IN emp.mgr%type)
RETURN VARCHAR2
IS
manager emp.ename%type;
BEGIN
SELECT ename
INTO manager
FROM emp e
WHERE e.empno = p_mgr;
RETURN(manager);
END;
這些東西在EMP表上引入另一個不必要的讀取時表現不夠好。
但是作爲Filip日子,這個正確的應該在SQL中完成,並且EMP表的JOIN自己加入。
你是對的,我實現了從問題解釋的功能。即:獲得給定員工的經理,以便將員工用作參數。 –
正如您所指出的,解決方案是將emp表與自身結合在一起。
CREATE FUNCTION fn_get_manager(p_empno IN NUMBER)
RETURN VARCHAR2
IS manager VARCHAR2;
BEGIN
SELECT mgr.name
INTO manager
FROM emp e, emp mgr
WHERE e.mgr = mgr.empno
AND e.empno = p_empno;
RETURN(manager);
END;
該查詢可以在將@employee
變量變爲參數,用戶定義的函數包裹。
要返回的員工列表,你可以調用函數在SELECT語句
SELECT e.empno, e.name, fn_get_manager(e.empno)
FROM emp e
雖然這個建築工作是做這樣一個簡單的請求的可怕的方式。該函數將爲emp表中的每個記錄執行,並且與簡單的join語句相比,結果將非常慢。
SELECT e.empno, e.name, mgr.name
FROM emp e,emp mgr
WHERE e.mgr = mgr.empno (+)
我用左這裏加入也處理「大老闆」,這沒有一個經理本人的邊緣情況。
編輯:更新查詢了一下甲骨文語法
感謝您的快速回復,請問您可以在oracle中執行 –
我更新了oracle(我記得,這是10年前) –
我appriciated你的答案 –
順便說一句,這是作業嗎? –
只是整理練習用紙 –
好像給我做作業一樣。 –