使用游标更新表

时间:2014-01-05 05:29:31

标签: sql oracle plsql

您好我无法使用游标更新jobs_new表中jobs表中的列,即使我在dbms_output中得到了正确的输出。它正在更新下面具有相同值的列是代码,请帮忙。

SET SERVER OUTPUT ON;

DECLARE
  CURSOR c_emp IS
    SELECT
      a.job_id,
      a.max_salary,
      b.job_id
    FROM jobs a, jobs_new b
    WHERE

  a_jobid VARCHAR2(100);
  b_jobid  VARCHAR2(10);
  l_salary NUMBER;
BEGIN

  OPEN c_emp;

  LOOP
    FETCH c_emp INTO a_jobid, l_salary, b_jobid;
    -- enter code here
    EXIT WHEN c_emp%NOTFOUND;

    UPDATE jobs_new
    SET max_salary = l_salary
    WHERE b_jobid = a_jobid;

    dbms_output.put_line(l_salary);
  END LOOP;

  CLOSE c_emp;
END;
/

1 个答案:

答案 0 :(得分:1)

您的查询似乎不完整,在条件之后没有任何内容,

问题在这里

update jobs_new set max_salary = L_SALARY where b_jobid = a_jobid;

应该是

update jobs_new set max_salary = L_SALARY where job_id = a_jobid;

但是考虑到job_is是唯一键,您不必使用游标进行此操作。你可以将一个Update语句作为

update jobs_new a set a.max_salary = (select b.max_salary
                                        from jobs b 
                                       where b.job_id = a.job_id);