我必须修改块以使用光标读取和显示我的数据库中已保存的购物者 26 购物篮的信息
I have to modify the block to use a cursor to read and display the information for the saved baskets of shopper 26 in my database
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;
很容易"convert"将SELECT
变成游标:
cursor cur_r is select ... <your query goes here>;
然后你必须声明一个游标变量(它将保存游标返回的结果)(而不是你现在声明的一堆变量),打开游标,从中获取,注意退出循环,关闭光标。太多的操作,那么 - 为什么不让 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;
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;
很容易"convert"将SELECT
变成游标:
cursor cur_r is select ... <your query goes here>;
然后你必须声明一个游标变量(它将保存游标返回的结果)(而不是你现在声明的一堆变量),打开游标,从中获取,注意退出循环,关闭光标。太多的操作,那么 - 为什么不让 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;