Oracle
使用游標的儲存過程
我正在嘗試使用游標創建一個程序,以列出每個部門所有員工的平均工資。我正在使用三個表,定義為
emp
(開齋節、姓名、年齡、薪水)works
(開齋節,做,pct_time)dept
(did、dname、預算、managerid)該過程正在編譯錯誤。我究竟做錯了什麼?請參閱下面的過程定義。
create or replace procedure get_avgSalary(ddept_id in dept.did%type) is cursor c1 is select avg(e.salary) from emp e, works w, dept d where e.eid=w.eid and d.did = w.did group by w.did; avg_sal c1%rowtype; begin for avg_sal in c1 loop dbms_output.put_line('Average salary of the employees in department ' || ddept_id ||' is '|| avg_sal.salary); end loop; end; /
我必須使用游標。這是我任務的一部分。
您正在嘗試輸出
avg_sal.salary
未定義的輸出。在游標主體中使用別名:
.... cursor c1 is select avg(e.salary) AS salary ...
旁注。似乎傳遞的參數 (
ddept_id
) 除了列印之外在過程中的任何地方都沒有使用。此外,自從引入語法以來已經很長時間JOIN
了,與 SQL89 風格相比,它更具可讀性(Oracle 也推薦)。最後,在這種情況下使用游標對我來說似乎很可疑……
我認為你的做法是錯誤的。首先,我認為您不需要程序/功能來解決您的問題。其次,我絕對看不到游標應該如何進入它。
**使用OVER()**子句嘗試以下視窗查詢:
SELECT avg(e.salary) OVER(PARTITION BY d.dname) FROM emp e, works w, dept d WHERE e.eid=w.eid and d.did = w.did;