我正在解決一些練習題以幫助我學習 pl/sql。我需要使用游標將資料從一個表添加到另一個表。我的代碼如下。我過去常常dbms_output.put_line確保游標中有資料,并且游標中的資料通過回圈一次進入變數c_ename和c_salary一行。問題似乎是變數中的資料無法插入top_paid_emp表中。我收到一個 ORA-00984: column not allowed here 錯誤。我認為這是一個語法錯誤,但我不明白在哪里。非常感謝任何幫助。
DECLARE
c_ename VARCHAR2(20);
c_salary NUMBER(10);
CURSOR c_topfive IS
SELECT ename, salary
FROM (SELECT ename, salary,
RANK() OVER (ORDER BY salary DESC) AS rank
FROM emp1)
WHERE rank <= 5;
BEGIN
OPEN c_topfive;
LOOP
FETCH c_topfive INTO c_ename, c_salary;
dbms_output.put_line(c_ename);
EXIT WHEN c_topfive%notfound;
INSERT INTO top_paid_emp (empname, salary) VALUES (c_name,c_salary);
END LOOP;
CLOSE c_topfive;
END;
uj5u.com熱心網友回復:
如果你正在取
FETCH c_topfive INTO c_ename, c_salary;
-------
那么你也應該在插入中使用它
INSERT INTO top_paid_emp (empname, salary) VALUES (c_name,c_salary);
------
請注意,您可以使用游標FOR回圈來完成它,例如
begin
for cur_r in (select ename, salary
from (select ename, salary,
rank() over (order by salary desc) as rank
from emp1)
where rank <= 5)
loop
insert into top_paid_emp (empname, salary) values (cur_r.ename, cur_r.salary);
end loop;
end;
如您所見,它為您節省了大量作業:您不必宣告任何游標變數、打開游標、獲取、注意何時退出回圈、關閉游標——Oracle 為您完成所有這些作業你。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/327531.html
