2014-01-05 2 views
0

Привет Я не могу обновить столбец в таблице 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

Ваш запрос кажется неполным, ничто не существует после того, как, где состояние,

Проблема здесь

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 jobs_new a set a.max_salary = (select b.max_salary 
             from jobs b 
             where b.job_id = a.job_id); 
+0

Да, это заявление об обновлении работает отлично для меня, поэтому мы не можем использовать курсоры для этих ситуаций? – user1477698

+0

Курсоры следует использовать, если есть некоторые сложные вычисления или операции с данными. Хотя полезно, курсоры просто увеличивают накладные расходы на базу данных и способ обновления с помощью курсора, он увеличивает контекстные переключатели. – San

Смежные вопросы