2015-12-21 1 views
1

Пожалуйста, помогите мне, чтобы преобразовать это заявление рамочную:Преобразовать чистый цикл в цикл с помощью курсора

BEGIN 
    FOR employee_rec in (SELECT * FROM BONUS) 
    LOOP 
     IF employee_rec.BONVALUE > 500 THEN 
     UPDATE BONUS 
     SET BONUS.TAX = BONUS.BONVALUE * 0.12 WHERE employee_rec.BONVALUE = BONUS.BONVALUE; 
     ELSIF 
     -- ... 
     END IF; 

    END LOOP; 
END; 

в заявлении, где CURSOR используется.

+0

Как правило, мы хотели бы видеть, какую попытку вы сами предприняли при решении проблемы, а также о том, где вы сталкиваетесь с проблемами. Запросы на код обычно не очень хорошо. – Sh4d0wsPlyr

+0

Я не делал попыток bc. Я не полностью понимаю синтаксис и использование «курсора». Надежный пример конверсии прояснит для меня оба аспекта. –

+2

Вы уже используете курсор. Вот что такое 'SELECT * FROM BONUS'. Если вы хотите назвать этот курсор, ну, это не так сложно ... просто определите курсор в разделе декларации и дайте ему имя. Однако, похоже, что в этом случае вам вообще не нужен курсор для цикла; Я предполагаю, что другие предложения IF также являются обновлениями в бонусной таблице? Если это так, вы должны быть в состоянии достичь этого в одном заявлении об обновлении. – Boneist

ответ

3

То, что у вас есть, представляет собой цикл на основе неявного определения курсора. Похоже, вам нужен цикл, основанный на явном курсовом определении.

Как указано в комментариях. Просто определите свой курсор явно в разделе декларации.

DECLARE 
    CURSOR cur_bonus IS 
    SELECT * 
    FROM bonus; 
BEGIN 
    FOR employee_rec IN cur_bonus 
    LOOP 
     IF employee_rec.BONVALUE > 500 THEN 
     UPDATE BONUS 
     SET BONUS.TAX = BONUS.BONVALUE * 0.12 WHERE employee_rec.BONVALUE = BONUS.BONVALUE; 
     ELSIF 
     -- ... 
     END IF; 

    END LOOP; 
END; 
Смежные вопросы