#oracle #oracle10g #oracle-sqldeveloper
#Oracle #oracle10g #oracle-sqldeveloper
Вопрос:
DECLARE
lv_basket_num NUMBER (3);
lv_created_date DATE;
lv_qty_num NUMBER(2);
lv_sub_num NUMBER(5,2);
lv_days_num NUMBER(3);
lv_shopper_num NUMBER(3) := 26;
BEGIN
SELECT idBasket, dtcreated, quantity, subtotal
INTO lv_basket_num, lv_created_date, lv_qty_num, lv_sub_num
FROM BB_BASKET
WHERE idShopper = lv_shopper_num
AND orderplaced= 0;
lv_days_num := SYSDATE-lv_created_date;
DBMS_OUTPUT.PUT_LINE(lv_basket_num||'*'||lv_created_date||'*'||lv_qty_num||'*'||lv_sub_num||'*'||lv_days_num);
END;
Комментарии:
1. В чем ваш вопрос? Что вы пробовали и какие у вас проблемы?
2. выше приведен код, в котором я должен изменить этот блок, чтобы использовать курсор для чтения и отображения информации для сохраненных корзин покупателя 26
3. Но что вы пытались достичь этого, и какие проблемы у вас есть с вашим измененным кодом? Показывая нам код, который предположительно работает (но выдает слишком много строк?) не объясняет, какая помощь вам нужна.
Ответ №1:
Это легко «преобразовать» SELECT
в курсор:
cursor cur_r is select ... <your query goes here>;
Затем вам нужно объявить переменную cursor (которая будет содержать результат, возвращаемый курсором) (вместо набора переменных, которые вы объявили сейчас), открыть курсор, извлечь из него, позаботиться о выходе из цикла, закрыть курсор. Слишком много действий, так почему бы вам не позволить Oracle сделать это за вас? Переключитесь на FOR
цикл курсора.
Вот как:
DECLARE
lv_shopper_num NUMBER(3) := 26;
BEGIN
for cur_r in (SELECT idBasket, dtcreated, quantity, subtotal,
sysdate - dtcreated as lv_days_num
FROM BB_BASKET
WHERE idShopper = lv_shopper_num
AND orderplaced = 0
)
loop
DBMS_OUTPUT.PUT_LINE(cur_r.idBasket ||'*'|| cur_r.dtcreated ||'*'||
cur_r.quantity ||'*'|| cur_r.subtotal ||'*'|| lv_days_num);
end loop;
END;